19
19
#include <gtest/gtest.h>
20
20
#include <unity/scopes/Annotation.h>
21
21
#include <unity/scopes/Query.h>
22
#include <unity/scopes/CategoryRenderer.h>
23
#include <unity/scopes/internal/CategoryRegistry.h>
22
#include <unity/scopes/internal/QueryImpl.h>
24
23
#include <unity/scopes/internal/AnnotationImpl.h>
25
24
#include <unity/UnityExceptions.h>
124
TEST(Annotation, card)
127
Query query("scope-A", "foo", "dep1");
129
Annotation annotation(Annotation::Type::Card);
130
annotation.set_icon("icon");
131
annotation.add_link("Link1", query);
133
EXPECT_EQ("icon", annotation.icon());
134
EXPECT_EQ(1, annotation.links().size());
135
auto link = annotation.links().front();
136
EXPECT_EQ("Link1", link->label());
137
EXPECT_EQ(query.scope_name(), link->query().scope_name());
138
EXPECT_EQ(query.department_id(), link->query().department_id());
139
EXPECT_EQ(query.query_string(), link->query().query_string());
143
TEST(Annotation, card_exceptions)
146
Query query("scope-A", "foo", "dep1");
148
Annotation annotation(Annotation::Type::Card);
149
annotation.set_icon("icon");
150
annotation.add_link("Link1", query);
152
// label currently makes sense for group only, but we shouldn't throw
153
EXPECT_NO_THROW(annotation.set_label("Label"));
154
EXPECT_THROW(annotation.add_link("Link2", query), unity::InvalidArgumentException); // only one link allowed
155
EXPECT_EQ(1, annotation.links().size());
159
123
TEST(Annotation, serialize)
171
135
EXPECT_EQ(1, links.size());
172
136
auto linkvm = links[0].get_dict();
173
137
EXPECT_EQ("Link1", linkvm["label"].get_string());
174
Query qout(linkvm["query"].get_dict());
138
Query qout = internal::QueryImpl::create(linkvm["query"].get_dict());
175
139
EXPECT_EQ("scope-A", qout.scope_name());
176
140
EXPECT_EQ("foo", qout.query_string());
177
141
EXPECT_EQ("dep1", qout.department_id());
181
145
TEST(Annotation, deserialize)
183
CategoryRegistry reg;
184
CategoryRenderer rdr;
185
auto cat = reg.register_category("1", "title", "icon", rdr);
186
147
Query query("scope-A", "foo", "dep1");
188
149
Annotation annotation(Annotation::Type::GroupedLink);
189
150
annotation.set_label("Foo");
190
151
annotation.add_link("Link1", query);
191
152
auto var = annotation.serialize();
192
AnnotationImpl impl(reg, var);
153
AnnotationImpl impl(var);
195
156
Annotation annotation(Annotation::Type::Link);
196
157
annotation.set_icon("Icon");
197
158
annotation.add_link("Link1", query);
198
159
auto var = annotation.serialize();
199
AnnotationImpl impl(reg, var);
202
Annotation annotation(Annotation::Type::Card);
203
annotation.set_icon("Icon");
204
annotation.set_category(cat);
205
annotation.add_link("Link1", query);
206
auto var = annotation.serialize();
207
AnnotationImpl impl(reg, var);
160
AnnotationImpl impl(var);
211
164
TEST(Annotation, deserialize_exceptions)
214
CategoryRegistry reg;
215
CategoryRenderer rdr;
216
167
Query query("scope-A", "foo", "dep1");
217
auto cat = reg.register_category("1", "title", "icon", rdr);
222
AnnotationImpl impl(reg, var);
172
AnnotationImpl impl(var);
225
175
catch (unity::InvalidArgumentException const& e) {}
249
199
var["type"] = "groupedlink";
252
AnnotationImpl impl(reg, var);
202
AnnotationImpl impl(var);
255
205
catch (unity::InvalidArgumentException const& e) {}
271
221
var["cat_id"] = "unknowncat";
274
AnnotationImpl impl(reg, var);
277
catch (unity::InvalidArgumentException const& e) {}
279
{ // deserialize with unknown category
280
Annotation annotation(Annotation::Type::Card);
281
annotation.set_icon("Icon");
282
annotation.set_category(cat);
283
annotation.add_link("Link1", query);
284
auto var = annotation.serialize();
288
AnnotationImpl impl(reg, var);
224
AnnotationImpl impl(var);
291
227
catch (unity::InvalidArgumentException const& e) {}
297
233
var["links"] = VariantArray();
300
AnnotationImpl impl(reg, var);
236
AnnotationImpl impl(var);
303
239
catch (unity::InvalidArgumentException const& e) {}