@@ -26,3 +26,126 @@ pub async fn all(db: &State<DbConn>) -> Result<Json<Vec<CategoryGetDto>>, Respon
2626
2727 Ok ( Json ( categories) )
2828}
29+
30+ #[ cfg( test) ]
31+ mod tests {
32+ use anyhow:: anyhow;
33+ use dtos:: CategoryGetDto ;
34+ use rocket:: local:: asynchronous:: Client ;
35+
36+ use super :: * ;
37+ use crate :: testing:: { self , category} ;
38+
39+ #[ tokio:: test]
40+ async fn categories_get_all_tracked ( ) -> anyhow:: Result < ( ) > {
41+ let db = category:: db ( ) . await ?;
42+ let r = category:: rocket ( db) . await ?;
43+
44+ let client = Client :: tracked ( r) . await ?;
45+
46+ let req = client. get ( "/api/categories/" ) ;
47+ let res = req. dispatch ( ) . await ;
48+ let categories = res
49+ . into_json :: < Vec < CategoryGetDto > > ( )
50+ . await
51+ . ok_or ( anyhow ! ( "Couldn't parse into json" ) ) ?;
52+
53+ // testing::category::seed_db has 3 non-deleted rows
54+ assert_eq ! ( categories. len( ) , 3 ) ;
55+
56+ Ok ( ( ) )
57+ }
58+
59+ #[ tokio:: test]
60+ async fn categories_get_all_func ( ) -> anyhow:: Result < ( ) > {
61+ let db = category:: db ( ) . await ?;
62+ let db = State :: from ( & db) ;
63+
64+ let categories = all ( db) . await ?;
65+
66+ // testing::category::seed_db has 3 non-deleted rows
67+ assert_eq ! ( categories. len( ) , 3 ) ;
68+
69+ Ok ( ( ) )
70+ }
71+
72+ #[ tokio:: test]
73+ async fn categories_get_by_id_exists_tracked ( ) -> anyhow:: Result < ( ) > {
74+ let db = category:: db ( ) . await ?;
75+ let r = category:: rocket ( db) . await ?;
76+
77+ let client = Client :: tracked ( r) . await ?;
78+
79+ let req = client. get ( "/api/categories/1" ) ;
80+ let res = req. dispatch ( ) . await ;
81+ let category = res. into_json :: < CategoryGetDto > ( ) . await ;
82+
83+ assert ! ( category. is_some( ) , "The first category is not deleted" ) ;
84+
85+ Ok ( ( ) )
86+ }
87+
88+ #[ tokio:: test]
89+ async fn categories_get_by_id_deleted_tracked ( ) -> anyhow:: Result < ( ) > {
90+ let db = category:: db ( ) . await ?;
91+ let r = category:: rocket ( db) . await ?;
92+
93+ let client = Client :: tracked ( r) . await ?;
94+
95+ let req = client. get ( "/api/categories/5" ) ;
96+ let res = req. dispatch ( ) . await ;
97+
98+ assert_eq ! ( res. status( ) . code, 404 , "The fifth category is deleted" ) ;
99+
100+ Ok ( ( ) )
101+ }
102+
103+ #[ tokio:: test]
104+ async fn categories_get_by_id_not_existant_tracked ( ) -> anyhow:: Result < ( ) > {
105+ let db = category:: db ( ) . await ?;
106+ let r = category:: rocket ( db) . await ?;
107+
108+ let client = Client :: tracked ( r) . await ?;
109+
110+ let req = client. get ( "/api/categories/1000" ) ;
111+ let res = req. dispatch ( ) . await ;
112+
113+ assert_eq ! ( res. status( ) . code, 404 , "The 1000th category does not exist" ) ;
114+
115+ Ok ( ( ) )
116+ }
117+
118+ #[ tokio:: test]
119+ async fn categories_get_by_id_exists_func ( ) -> anyhow:: Result < ( ) > {
120+ let db = category:: db ( ) . await ?;
121+ let db = State :: from ( & db) ;
122+
123+ let res = one ( 1 , db) . await ;
124+ assert ! ( res. is_ok( ) , "The first category is not deleted" ) ;
125+
126+ Ok ( ( ) )
127+ }
128+
129+ #[ tokio:: test]
130+ async fn categories_get_by_id_deleted_func ( ) -> anyhow:: Result < ( ) > {
131+ let db = testing:: db ( ) . await ?;
132+ let db = State :: from ( & db) ;
133+ testing:: category:: seed_db ( db) . await ?;
134+
135+ let res = one ( 5 , db) . await ;
136+ assert ! ( res. is_err( ) , "The fifth category is deleted" ) ;
137+
138+ Ok ( ( ) )
139+ }
140+
141+ #[ tokio:: test]
142+ async fn categories_get_by_id_not_existant_tracked_func ( ) -> anyhow:: Result < ( ) > {
143+ let db = category:: db ( ) . await ?;
144+ let db = State :: from ( & db) ;
145+
146+ let res = one ( 1000 , db) . await ;
147+ assert ! ( res. is_err( ) , "The 1000th category does not exist" ) ;
148+
149+ Ok ( ( ) )
150+ }
151+ }
0 commit comments