1- namespace Hawaii . Cli ;
1+ namespace Hawaii . Cli . Tests ;
22
3+ /// <summary>
4+ /// End To End Tests for CLI.
5+ /// </summary>
36[ TestClass ]
47public class EndToEndTests
58{
9+ /// <summary>
10+ /// Initializing config for cosmos DB.
11+ /// </summary>
12+ private static string TEST_RUNTIME_CONFIG = "hawaii-config-test.json" ;
613 [ TestMethod ]
714 public void TestInitForCosmosDB ( )
815 {
9- string [ ] args = { "init" , "-n" , "hawaii-config-test" , "--database-type" , "cosmos" , "--connection-string" , "localhost:5000" , "--cosmos-database" , "graphqldb" , "--cosmos-container" , "planet" , "--graphql-schema" , "schema.gql" } ;
16+ string [ ] args = { "init" , "-n" , "hawaii-config-test" , "--database-type" , "cosmos" ,
17+ "--connection-string" , "localhost:5000" , "--cosmos-database" ,
18+ "graphqldb" , "--cosmos-container" , "planet" , "--graphql-schema" , "schema.gql" } ;
1019 Program . Main ( args ) ;
11- string jsonString = File . ReadAllText ( "hawaii-config-test.json" ) ;
1220
13- RuntimeConfig ? runtimeConfig = JsonSerializer . Deserialize < RuntimeConfig > ( jsonString , RuntimeConfig . GetDeserializationOptions ( ) ) ;
14-
15- if ( runtimeConfig is null )
16- {
17- Assert . Fail ( "Config was not genertaed correctly." ) ;
18- }
21+ RuntimeConfig ? runtimeConfig = TryGetRuntimeConfig ( TEST_RUNTIME_CONFIG ) ;
1922
23+ Assert . IsNotNull ( runtimeConfig ) ;
2024 Assert . AreEqual ( DatabaseType . cosmos , runtimeConfig . DatabaseType ) ;
2125 Assert . IsNotNull ( runtimeConfig . CosmosDb ) ;
2226 Assert . AreEqual ( "graphqldb" , runtimeConfig . CosmosDb . Database ) ;
@@ -31,4 +35,132 @@ public void TestInitForCosmosDB()
3135 Assert . AreEqual ( HostModeType . Production , runtimeConfig . HostGlobalSettings . Mode ) ;
3236
3337 }
38+
39+ /// <summary>
40+ /// Test to verify adding a new Entity.
41+ /// </summary>
42+ [ TestMethod ]
43+ public void TestAddEntity ( )
44+ {
45+ string [ ] initArgs = { "init" , "-n" , "hawaii-config-test" , "--database-type" , "mssql" , "--connection-string" , "localhost:5000" } ;
46+ Program . Main ( initArgs ) ;
47+
48+ RuntimeConfig ? runtimeConfig = TryGetRuntimeConfig ( TEST_RUNTIME_CONFIG ) ;
49+
50+ Assert . IsNotNull ( runtimeConfig ) ;
51+ Assert . AreEqual ( 0 , runtimeConfig . Entities . Count ( ) ) ; // No entities
52+
53+ string [ ] addArgs = { "add" , "todo" , "-n" , "hawaii-config-test" , "--source" , "s001.todo" ,
54+ "--rest" , "todo" , "--graphql" , "todo" , "--permissions" , "anonymous:*" } ;
55+ Program . Main ( addArgs ) ;
56+
57+ runtimeConfig = TryGetRuntimeConfig ( TEST_RUNTIME_CONFIG ) ;
58+ Assert . IsNotNull ( runtimeConfig ) ;
59+ Assert . AreEqual ( 1 , runtimeConfig . Entities . Count ( ) ) ; // 1 new entity added
60+ Assert . IsTrue ( runtimeConfig . Entities . ContainsKey ( "todo" ) ) ;
61+ Entity entity = runtimeConfig . Entities [ "todo" ] ;
62+ Assert . AreEqual ( "{\" route\" :\" /todo\" }" , JsonSerializer . Serialize ( entity . Rest ) ) ;
63+ Assert . AreEqual ( "{\" type\" :{\" singular\" :\" todo\" ,\" plural\" :\" todos\" }}" , JsonSerializer . Serialize ( entity . GraphQL ) ) ;
64+ Assert . AreEqual ( 1 , entity . Permissions . Length ) ;
65+ Assert . AreEqual ( "anonymous" , entity . Permissions [ 0 ] . Role ) ;
66+ Assert . AreEqual ( 1 , entity . Permissions [ 0 ] . Actions . Length ) ;
67+ Assert . AreEqual ( WILDCARD , GetCRUDOperation ( ( JsonElement ) entity . Permissions [ 0 ] . Actions [ 0 ] ) ) ;
68+ }
69+
70+ /// <summary>
71+ /// Test to verify updating an existing Entity.
72+ /// It tests updating permissions as well as relationship
73+ /// </summary>
74+ [ TestMethod ]
75+ public void TestUpdateEntity ( )
76+ {
77+ string [ ] initArgs = { "init" , "-n" , "hawaii-config-test" , "--database-type" ,
78+ "mssql" , "--connection-string" , "localhost:5000" } ;
79+ Program . Main ( initArgs ) ;
80+
81+ RuntimeConfig ? runtimeConfig = TryGetRuntimeConfig ( TEST_RUNTIME_CONFIG ) ;
82+
83+ Assert . IsNotNull ( runtimeConfig ) ;
84+ Assert . AreEqual ( 0 , runtimeConfig . Entities . Count ( ) ) ; // No entities
85+
86+ string [ ] addArgs = { "add" , "todo" , "-n" , "hawaii-config-test" ,
87+ "--source" , "s001.todo" , "--rest" , "todo" ,
88+ "--graphql" , "todo" , "--permissions" , "anonymous:*" } ;
89+ Program . Main ( addArgs ) ;
90+
91+ runtimeConfig = TryGetRuntimeConfig ( TEST_RUNTIME_CONFIG ) ;
92+ Assert . IsNotNull ( runtimeConfig ) ;
93+ Assert . AreEqual ( 1 , runtimeConfig . Entities . Count ( ) ) ; // 1 new entity added
94+
95+ // Adding another entity
96+ //
97+ string [ ] addArgs_2 = { "add" , "books" , "-n" , "hawaii-config-test" ,
98+ "--source" , "s001.books" , "--rest" , "books" ,
99+ "--graphql" , "books" , "--permissions" , "anonymous:*" } ;
100+ Program . Main ( addArgs_2 ) ;
101+
102+ runtimeConfig = TryGetRuntimeConfig ( TEST_RUNTIME_CONFIG ) ;
103+ Assert . IsNotNull ( runtimeConfig ) ;
104+ Assert . AreEqual ( 2 , runtimeConfig . Entities . Count ( ) ) ; // 1 more entity added
105+
106+ string [ ] updateArgs = { "update" , "todo" , "-n" , "hawaii-config-test" ,
107+ "--source" , "s001.todos" , "--graphql" , "true" ,
108+ "--permissions" , "anonymous:create,delete" ,
109+ "--fields.include" , "id,content" , "--fields.exclude" , "rating,level" ,
110+ "--relationship" , "r1" , "--cardinality" , "one" ,
111+ "--target.entity" , "books" , "--mapping.fields" , "id:book_id" ,
112+ "--linking.object" , "todo_books" ,
113+ "--linking.source.fields" , "todo_id" ,
114+ "--linking.target.fields" , "id" } ;
115+ Program . Main ( updateArgs ) ;
116+
117+ runtimeConfig = TryGetRuntimeConfig ( TEST_RUNTIME_CONFIG ) ;
118+ Assert . IsNotNull ( runtimeConfig ) ;
119+ Assert . AreEqual ( 2 , runtimeConfig . Entities . Count ( ) ) ; // No new entity added
120+
121+ Assert . IsTrue ( runtimeConfig . Entities . ContainsKey ( "todo" ) ) ;
122+ Entity entity = runtimeConfig . Entities [ "todo" ] ;
123+ Assert . AreEqual ( "{\" route\" :\" /todo\" }" , JsonSerializer . Serialize ( entity . Rest ) ) ;
124+ Assert . AreEqual ( "true" , entity . GraphQL ! . ToString ( ) ) ;
125+ Assert . AreEqual ( 1 , entity . Permissions . Length ) ;
126+ Assert . AreEqual ( "anonymous" , entity . Permissions [ 0 ] . Role ) ;
127+ Assert . AreEqual ( 4 , entity . Permissions [ 0 ] . Actions . Length ) ;
128+ //Only create and delete are updated.
129+ Assert . AreEqual ( "{\" action\" :\" create\" ,\" fields\" :{\" include\" :[\" id\" ,\" content\" ],\" exclude\" :[\" rating\" ,\" level\" ]}}" , JsonSerializer . Serialize ( entity . Permissions [ 0 ] . Actions [ 0 ] ) ) ;
130+ Assert . AreEqual ( "{\" action\" :\" delete\" ,\" fields\" :{\" include\" :[\" id\" ,\" content\" ],\" exclude\" :[\" rating\" ,\" level\" ]}}" , JsonSerializer . Serialize ( entity . Permissions [ 0 ] . Actions [ 1 ] ) ) ;
131+ Assert . AreEqual ( "\" read\" " , JsonSerializer . Serialize ( entity . Permissions [ 0 ] . Actions [ 2 ] ) ) ;
132+ Assert . AreEqual ( "\" update\" " , JsonSerializer . Serialize ( entity . Permissions [ 0 ] . Actions [ 3 ] ) ) ;
133+
134+
135+ Assert . IsTrue ( entity . Relationships ! . ContainsKey ( "r1" ) ) ;
136+ Relationship relationship = entity . Relationships [ "r1" ] ;
137+ Assert . AreEqual ( 1 , entity . Relationships . Count ( ) ) ;
138+ Assert . AreEqual ( Cardinality . One , relationship . Cardinality ) ;
139+ Assert . AreEqual ( "books" , relationship . TargetEntity ) ;
140+ Assert . AreEqual ( "todo_books" , relationship . LinkingObject ) ;
141+ CollectionAssert . AreEqual ( new string [ ] { "id" } , relationship . SourceFields ) ;
142+ CollectionAssert . AreEqual ( new string [ ] { "book_id" } , relationship . TargetFields ) ;
143+ CollectionAssert . AreEqual ( new string [ ] { "todo_id" } , relationship . LinkingSourceFields ) ;
144+ CollectionAssert . AreEqual ( new string [ ] { "id" } , relationship . LinkingTargetFields ) ;
145+ }
146+
147+ public static RuntimeConfig ? TryGetRuntimeConfig ( string testRuntimeConfig )
148+ {
149+ string jsonString ;
150+
151+ if ( ! TryReadRuntimeConfig ( testRuntimeConfig , out jsonString ) )
152+ {
153+ return null ;
154+ }
155+
156+ RuntimeConfig ? runtimeConfig = JsonSerializer . Deserialize < RuntimeConfig > ( jsonString , RuntimeConfig . GetDeserializationOptions ( ) ) ;
157+
158+ if ( runtimeConfig is null )
159+ {
160+ Assert . Fail ( "Config was not generated correctly." ) ;
161+ }
162+
163+ return runtimeConfig ;
164+ }
165+
34166}
0 commit comments