-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathclient_test.cpp
More file actions
112 lines (90 loc) · 4.03 KB
/
Copy pathclient_test.cpp
File metadata and controls
112 lines (90 loc) · 4.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <gtest/gtest.h>
#include <launchdarkly/client_side/client.hpp>
#include <launchdarkly/context_builder.hpp>
#include <map>
using namespace launchdarkly;
using namespace launchdarkly::client_side;
TEST(ClientTest, ClientConstructedWithMinimalConfigAndContext) {
tl::expected<Config, Error> config = ConfigBuilder("sdk-123").Build();
ASSERT_TRUE(config);
Context context = ContextBuilder().Kind("cat", "shadow").Build();
Client client(std::move(*config), context);
char const* version = client.Version();
ASSERT_TRUE(version);
ASSERT_STREQ(version, "3.11.0"); // {x-release-please-version}
}
TEST(ClientTest, AllFlagsIsEmpty) {
Client client(ConfigBuilder("sdk-123").Build().value(),
ContextBuilder().Kind("cat", "shadow").Build());
ASSERT_TRUE(client.AllFlags().empty());
}
TEST(ClientTest, BoolVariationDefaultPassesThrough) {
Client client(ConfigBuilder("sdk-123").Build().value(),
ContextBuilder().Kind("cat", "shadow").Build());
std::string const flag = "extra-cat-food";
std::vector<bool> values = {true, false};
for (auto const& v : values) {
ASSERT_EQ(client.BoolVariation(flag, v), v);
ASSERT_EQ(*client.BoolVariationDetail(flag, v), v);
}
}
TEST(ClientTest, StringVariationDefaultPassesThrough) {
Client client(ConfigBuilder("sdk-123").Build().value(),
ContextBuilder().Kind("cat", "shadow").Build());
std::string const flag = "treat";
std::vector<std::string> values = {"chicken", "fish", "cat-grass"};
for (auto const& v : values) {
ASSERT_EQ(client.StringVariation(flag, v), v);
ASSERT_EQ(*client.StringVariationDetail(flag, v), v);
}
}
TEST(ClientTest, IntVariationDefaultPassesThrough) {
Client client(ConfigBuilder("sdk-123").Build().value(),
ContextBuilder().Kind("cat", "shadow").Build());
std::string const flag = "weight";
std::vector<int> values = {0, 12, 13, 24, 1000};
for (auto const& v : values) {
ASSERT_EQ(client.IntVariation("weight", v), v);
ASSERT_EQ(*client.IntVariationDetail("weight", v), v);
}
}
TEST(ClientTest, DoubleVariationDefaultPassesThrough) {
Client client(ConfigBuilder("sdk-123").Build().value(),
ContextBuilder().Kind("cat", "shadow").Build());
std::string const flag = "weight";
std::vector<double> values = {0.0, 12.0, 13.0, 24.0, 1000.0};
for (auto const& v : values) {
ASSERT_EQ(client.DoubleVariation(flag, v), v);
ASSERT_EQ(*client.DoubleVariationDetail(flag, v), v);
}
}
TEST(ClientTest, JsonVariationDefaultPassesThrough) {
Client client(ConfigBuilder("sdk-123").Build().value(),
ContextBuilder().Kind("cat", "shadow").Build());
std::string const flag = "assorted-values";
std::vector<Value> values = {
Value({"running", "jumping"}), Value(3), Value(1.0), Value(true),
Value(std::map<std::string, Value>{{"weight", 20}})};
for (auto const& v : values) {
ASSERT_EQ(client.JsonVariation(flag, v), v);
ASSERT_EQ(*client.JsonVariationDetail(flag, v), v);
}
}
// This test mainly serves to catch any changes made to the types in the Data
// Source Status API that are not backwards-compatible.
TEST(ClientTest, DataSourceStatus) {
Client client(ConfigBuilder("sdk-123").Build().value(),
ContextBuilder().Kind("cat", "shadow").Build());
client_side::data_sources::DataSourceStatus ds_status =
client.DataSourceStatus().Status();
std::optional<client_side::data_sources::DataSourceStatus::ErrorInfo>
last_err = ds_status.LastError();
ASSERT_FALSE(last_err);
client_side::data_sources::DataSourceStatus::DataSourceState state =
ds_status.State();
ASSERT_EQ(state, client_side::data_sources::DataSourceStatus::
DataSourceState::kInitializing);
client_side::data_sources::DataSourceStatus::DateTime date =
ds_status.StateSince();
ASSERT_NE(date, client_side::data_sources::DataSourceStatus::DateTime{});
}