11package org .typesense .api ;
22
3- import java .util .Arrays ;
4-
53import org .junit .jupiter .api .AfterEach ;
6- import static org .junit .jupiter .api .Assertions .assertEquals ;
7- import static org .junit .jupiter .api .Assertions .assertNotNull ;
84import org .junit .jupiter .api .BeforeEach ;
95import 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