Skip to content

Commit 2a57cab

Browse files
committed
test(analytics): test new analytics api implementation
1 parent 57493d2 commit 2a57cab

File tree

2 files changed

+183
-102
lines changed

2 files changed

+183
-102
lines changed

src/test/java/org/typesense/api/AnalyticsEventsTest.java

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,34 @@
77
import static org.junit.jupiter.api.Assertions.assertNotNull;
88
import org.junit.jupiter.api.BeforeEach;
99
import org.junit.jupiter.api.Test;
10+
import org.typesense.model.AnalyticsEvent;
1011
import org.typesense.model.AnalyticsEventCreateResponse;
11-
import org.typesense.model.AnalyticsEventCreateSchema;
12+
import org.typesense.model.AnalyticsEventData;
1213

1314
public class AnalyticsEventsTest {
1415

1516
private Client client;
1617
private Helper helper;
18+
19+
private String ruleName;
1720

1821
@BeforeEach
1922
void setUp() throws Exception {
2023
helper = new Helper();
2124
client = helper.getClient();
25+
26+
if (!Helper.isV30OrAbove(client)) {
27+
org.junit.jupiter.api.Assumptions.assumeTrue(false, "Skipping test - requires Typesense v30 or above");
28+
}
29+
2230
helper.teardown();
2331
helper.createTestCollection();
2432
helper.createTestQueryCollection();
25-
helper.createTestAnalyticsRule();
33+
helper.createTestQueryDocument();
34+
helper.createTestAnalyticsCollection();
35+
String ruleName = helper.createTestAnalyticsRule();
36+
37+
this.ruleName = ruleName;
2638
}
2739

2840
@AfterEach
@@ -32,17 +44,19 @@ void tearDown() throws Exception {
3244

3345
@Test
3446
void testCreate() throws Exception {
35-
HashMap<String, Object> eventData = new HashMap<>();
36-
eventData.put("q", "running shoes");
37-
eventData.put("user_id", "1234");
38-
AnalyticsEventCreateSchema analyticsEvent = new AnalyticsEventCreateSchema()
39-
.type("search")
40-
.name("products_search_event")
47+
48+
AnalyticsEventData eventData = new AnalyticsEventData()
49+
.q("running shoes")
50+
.userId("1234")
51+
.docId("query1");
52+
53+
AnalyticsEvent analyticsEvent = new AnalyticsEvent()
54+
.eventType("search")
55+
.name(ruleName)
4156
.data(eventData);
4257

4358
AnalyticsEventCreateResponse result = this.client.analytics().events().create(analyticsEvent);
4459
assertNotNull(result);
4560
assertEquals(true, result.isOk());
46-
4761
}
4862
}
Lines changed: 160 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,31 @@
11
package org.typesense.api;
22

3-
import java.util.Arrays;
4-
53
import org.junit.jupiter.api.AfterEach;
6-
import static org.junit.jupiter.api.Assertions.assertEquals;
7-
import static org.junit.jupiter.api.Assertions.assertNotNull;
84
import org.junit.jupiter.api.BeforeEach;
95
import org.junit.jupiter.api.Test;
10-
import org.typesense.model.AnalyticsRuleDeleteResponse;
11-
import org.typesense.model.AnalyticsRuleParameters;
12-
import org.typesense.model.AnalyticsRuleParametersDestination;
13-
import org.typesense.model.AnalyticsRuleParametersSource;
14-
import org.typesense.model.AnalyticsRuleSchema;
15-
import org.typesense.model.AnalyticsRuleUpsertSchema;
16-
import org.typesense.model.AnalyticsRulesRetrieveSchema;
176

18-
public class AnalyticsRulesTest {
7+
import org.typesense.model.AnalyticsRule;
8+
import org.typesense.model.AnalyticsRuleCreate;
9+
import org.typesense.model.AnalyticsRuleCreateParams;
10+
11+
import java.util.ArrayList;
12+
import java.util.List;
13+
14+
import static org.junit.jupiter.api.Assertions.*;
15+
import static org.junit.jupiter.api.Assertions.assertEquals;
16+
import static org.junit.jupiter.api.Assertions.assertFalse;
17+
import static org.junit.jupiter.api.Assertions.assertNotNull;
18+
import static org.junit.jupiter.api.Assertions.assertTrue;
19+
import static org.junit.jupiter.api.Assertions.fail;
20+
import org.typesense.model.InlineResponse2003;
21+
import org.typesense.model.CollectionSchema;
22+
import org.typesense.model.Field;
23+
import java.util.Arrays;
24+
import java.util.Map;
25+
import java.util.HashMap;
26+
27+
28+
class AnalyticsRulesTest {
1929

2030
private Client client;
2131
private Helper helper;
@@ -24,9 +34,35 @@ public class AnalyticsRulesTest {
2434
void setUp() throws Exception {
2535
helper = new Helper();
2636
client = helper.getClient();
27-
helper.teardown();
28-
helper.createTestCollection();
29-
helper.createTestQueryCollection();
37+
38+
if (!Helper.isV30OrAbove(client)) {
39+
org.junit.jupiter.api.Assumptions.assumeTrue(false, "Skipping test - requires Typesense v30 or above");
40+
}
41+
42+
try {
43+
CollectionSchema collectionSchema = new CollectionSchema()
44+
.name("companies")
45+
.fields(Arrays.asList(
46+
new Field().name("company_name").type("string"),
47+
new Field().name("num_employees").type("int32"),
48+
new Field().name("country").type("string")
49+
));
50+
client.collections().create(collectionSchema);
51+
} catch (Exception e) {
52+
}
53+
54+
try {
55+
CollectionSchema analyticsCollectionSchema = new CollectionSchema()
56+
.name("analytics_data")
57+
.fields(Arrays.asList(
58+
new Field().name("rule_name").type("string"),
59+
new Field().name("event_type").type("string"),
60+
new Field().name("counter_value").type("int32"),
61+
new Field().name("timestamp").type("int64")
62+
));
63+
client.collections().create(analyticsCollectionSchema);
64+
} catch (Exception e) {
65+
}
3066
}
3167

3268
@AfterEach
@@ -36,96 +72,127 @@ void tearDown() throws Exception {
3672

3773
@Test
3874
void testCreate() throws Exception {
39-
AnalyticsRuleSchema analyticsRuleSchema = new AnalyticsRuleSchema();
40-
analyticsRuleSchema.setName("nohits-queries");
41-
analyticsRuleSchema.setType(AnalyticsRuleSchema.TypeEnum.NOHITS_QUERIES);
42-
analyticsRuleSchema.setParams(new AnalyticsRuleParameters()
43-
.source(new AnalyticsRuleParametersSource()
44-
.collections(Arrays.asList("books")))
45-
.destination(new AnalyticsRuleParametersDestination()
46-
.collection("queries")));
47-
48-
AnalyticsRuleSchema result = this.client.analytics().rules().create(analyticsRuleSchema);
75+
76+
String ruleName = "test-rule-" + System.currentTimeMillis();
77+
78+
AnalyticsRuleCreate analyticsRule = new AnalyticsRuleCreate()
79+
.name(ruleName)
80+
.type(AnalyticsRuleCreate.TypeEnum.COUNTER)
81+
.collection("analytics_data")
82+
.eventType("click")
83+
.params(new AnalyticsRuleCreateParams()
84+
.counterField("num_employees")
85+
.weight(1));
86+
87+
List<AnalyticsRuleCreate> rules = new ArrayList<>();
88+
rules.add(analyticsRule);
89+
90+
AnalyticsRules.AnalyticsRulesResponse result = this.client.analytics().rules().create(rules);
4991
assertNotNull(result);
50-
assertEquals("nohits-queries", result.getName());
51-
52-
AnalyticsRuleParameters params = result.getParams();
53-
assertNotNull(params);
54-
55-
assertNotNull(params.getSource());
56-
assertEquals(Arrays.asList("books"), params.getSource().getCollections());
57-
58-
assertNotNull(params.getDestination());
59-
assertEquals("queries", params.getDestination().getCollection());
60-
}
61-
62-
@Test
63-
void testUpsert() throws Exception {
64-
AnalyticsRuleUpsertSchema analyticsRuleSchema = new AnalyticsRuleUpsertSchema()
65-
.type(AnalyticsRuleUpsertSchema.TypeEnum.NOHITS_QUERIES)
66-
.params(new AnalyticsRuleParameters()
67-
.source(new AnalyticsRuleParametersSource()
68-
.collections(Arrays.asList("books")))
69-
.destination(new AnalyticsRuleParametersDestination()
70-
.collection("queries")));
71-
72-
AnalyticsRuleSchema result = this.client.analytics().rules().upsert("nohits-queries", analyticsRuleSchema);
73-
assertNotNull(result);
74-
assertEquals("nohits-queries", result.getName());
75-
76-
AnalyticsRuleParameters params = result.getParams();
77-
assertNotNull(params);
78-
79-
assertNotNull(params.getSource());
80-
assertEquals(Arrays.asList("books"), params.getSource().getCollections());
81-
82-
assertNotNull(params.getDestination());
83-
assertEquals("queries", params.getDestination().getCollection());
92+
assertFalse(result.isEmpty());
93+
assertEquals(1, result.getCount());
94+
95+
AnalyticsRule createdRule = result.getFirstRule();
96+
assertNotNull(createdRule);
97+
assertEquals(ruleName, createdRule.getName());
98+
assertEquals(AnalyticsRuleCreate.TypeEnum.COUNTER, createdRule.getType());
99+
assertEquals("analytics_data", createdRule.getCollection());
100+
assertEquals("click", createdRule.getEventType());
84101
}
85102

86103
@Test
87104
void testRetrieve() throws Exception {
88-
helper.createTestAnalyticsRule();
89-
AnalyticsRuleSchema result = this.client.analytics().rules("analytics-rule").retrieve();
90-
105+
106+
String ruleName = "test-rule-" + System.currentTimeMillis();
107+
108+
AnalyticsRuleCreate analyticsRule = new AnalyticsRuleCreate()
109+
.name(ruleName)
110+
.type(AnalyticsRuleCreate.TypeEnum.COUNTER)
111+
.collection("analytics_data")
112+
.eventType("click")
113+
.params(new AnalyticsRuleCreateParams()
114+
.counterField("num_employees")
115+
.weight(1));
116+
117+
List<AnalyticsRuleCreate> rules = new ArrayList<>();
118+
rules.add(analyticsRule);
119+
120+
this.client.analytics().rules().create(rules);
121+
122+
List<AnalyticsRule> result = this.client.analytics().rules().retrieve();
91123
assertNotNull(result);
92-
assertEquals("analytics-rule", result.getName());
93-
94-
AnalyticsRuleParameters params = result.getParams();
95-
assertNotNull(params);
96-
97-
assertNotNull(params.getSource());
98-
assertEquals(Arrays.asList("books"), params.getSource().getCollections());
99-
100-
assertNotNull(params.getDestination());
101-
assertEquals("queries", params.getDestination().getCollection());
124+
assertTrue(result.size() >= 1, "number of rules is invalid");
125+
126+
AnalyticsRule foundRule = null;
127+
for (AnalyticsRule rule : result) {
128+
if (ruleName.equals(rule.getName())) {
129+
foundRule = rule;
130+
break;
131+
}
132+
}
133+
134+
assertNotNull(foundRule, "rule not found");
135+
assertEquals(ruleName, foundRule.getName());
136+
assertEquals(AnalyticsRuleCreate.TypeEnum.COUNTER, foundRule.getType());
137+
assertEquals("analytics_data", foundRule.getCollection());
138+
assertEquals("click", foundRule.getEventType());
102139
}
103-
140+
104141
@Test
105-
void testRetrieveAll() throws Exception {
106-
helper.createTestAnalyticsRule();
107-
AnalyticsRulesRetrieveSchema result = this.client.analytics().rules().retrieve();
108-
142+
void testRetrieveSingle() throws Exception {
143+
144+
String ruleName = "test-rule-" + System.currentTimeMillis();
145+
146+
AnalyticsRuleCreate analyticsRule = new AnalyticsRuleCreate()
147+
.name(ruleName)
148+
.type(AnalyticsRuleCreate.TypeEnum.COUNTER)
149+
.collection("analytics_data")
150+
.eventType("click")
151+
.params(new AnalyticsRuleCreateParams()
152+
.counterField("num_employees")
153+
.weight(1));
154+
155+
List<AnalyticsRuleCreate> rules = new ArrayList<>();
156+
rules.add(analyticsRule);
157+
158+
this.client.analytics().rules().create(rules);
159+
160+
AnalyticsRule result = this.client.analytics().rules(ruleName).retrieve();
109161
assertNotNull(result);
110-
assertEquals("analytics-rule", result.getRules().get(0).getName());
111-
assertEquals(1, result.getRules().size());
112-
113-
AnalyticsRuleParameters params = result.getRules().get(0).getParams();
114-
assertNotNull(params);
115-
116-
assertNotNull(params.getSource());
117-
assertEquals(Arrays.asList("books"), params.getSource().getCollections());
118-
119-
assertNotNull(params.getDestination());
120-
assertEquals("queries", params.getDestination().getCollection());
162+
assertEquals(ruleName, result.getName());
163+
assertEquals(AnalyticsRuleCreate.TypeEnum.COUNTER, result.getType());
164+
assertEquals("analytics_data", result.getCollection());
165+
assertEquals("click", result.getEventType());
121166
}
122-
167+
123168
@Test
124169
void testDelete() throws Exception {
125-
helper.createTestAnalyticsRule();
126-
AnalyticsRuleDeleteResponse result = this.client.analytics().rules("analytics-rule").delete();
127-
170+
171+
String ruleName = "test-rule-" + System.currentTimeMillis();
172+
173+
AnalyticsRuleCreate analyticsRule = new AnalyticsRuleCreate()
174+
.name(ruleName)
175+
.type(AnalyticsRuleCreate.TypeEnum.COUNTER)
176+
.collection("analytics_data")
177+
.eventType("click")
178+
.params(new AnalyticsRuleCreateParams()
179+
.counterField("num_employees")
180+
.weight(1));
181+
182+
List<AnalyticsRuleCreate> rules = new ArrayList<>();
183+
rules.add(analyticsRule);
184+
185+
this.client.analytics().rules().create(rules);
186+
187+
AnalyticsRule result = this.client.analytics().rules(ruleName).delete();
128188
assertNotNull(result);
129-
assertEquals("analytics-rule", result.getName());
189+
assertEquals(ruleName, result.getName());
190+
191+
try {
192+
this.client.analytics().rules(ruleName).retrieve();
193+
fail("Rule should have been deleted");
194+
} catch (Exception e) {
195+
assertTrue(e.getMessage().contains("not found") || e.getMessage().contains("404"));
196+
}
130197
}
131198
}

0 commit comments

Comments
 (0)