1
1
use conduit:: { Handler , Method } ;
2
2
use conduit_test:: MockRequest ;
3
3
4
- use cargo_registry:: db:: RequestTransaction ;
5
4
use cargo_registry:: category:: { Category , EncodableCategory , EncodableCategoryWithSubcategories } ;
6
5
7
6
#[ derive( RustcDecodable ) ]
@@ -25,7 +24,7 @@ struct CategoryWithSubcategories {
25
24
#[ test]
26
25
fn index ( ) {
27
26
let ( _b, app, middle) = :: app ( ) ;
28
- let mut req = :: req ( app, Method :: Get , "/api/v1/categories" ) ;
27
+ let mut req = :: req ( app. clone ( ) , Method :: Get , "/api/v1/categories" ) ;
29
28
30
29
// List 0 categories if none exist
31
30
let mut response = ok_resp ! ( middle. call( & mut req) ) ;
@@ -34,9 +33,11 @@ fn index() {
34
33
assert_eq ! ( json. meta. total, 0 ) ;
35
34
36
35
// Create a category and a subcategory
37
- :: mock_category ( & mut req, "foo" , "foo" ) ;
38
- :: mock_category ( & mut req, "foo::bar" , "foo::bar" ) ;
39
-
36
+ {
37
+ let conn = t ! ( app. diesel_database. get( ) ) ;
38
+ :: new_category ( "foo" , "foo" ) . create_or_update ( & conn) . unwrap ( ) ;
39
+ :: new_category ( "foo::bar" , "foo::bar" ) . create_or_update ( & conn) . unwrap ( ) ;
40
+ }
40
41
let mut response = ok_resp ! ( middle. call( & mut req) ) ;
41
42
let json: CategoryList = :: json ( & mut response) ;
42
43
@@ -51,13 +52,18 @@ fn show() {
51
52
let ( _b, app, middle) = :: app ( ) ;
52
53
53
54
// Return not found if a category doesn't exist
54
- let mut req = :: req ( app, Method :: Get , "/api/v1/categories/foo-bar" ) ;
55
+ let mut req = :: req ( app. clone ( ) , Method :: Get , "/api/v1/categories/foo-bar" ) ;
55
56
let response = t_resp ! ( middle. call( & mut req) ) ;
56
57
assert_eq ! ( response. status. 0 , 404 ) ;
57
58
58
59
// Create a category and a subcategory
59
- :: mock_category ( & mut req, "Foo Bar" , "foo-bar" ) ;
60
- :: mock_category ( & mut req, "Foo Bar::Baz" , "foo-bar::baz" ) ;
60
+ {
61
+ let conn = t ! ( app. diesel_database. get( ) ) ;
62
+
63
+ // Create a category and a subcategory
64
+ t ! ( :: new_category( "Foo Bar" , "foo-bar" ) . create_or_update( & conn) ) ;
65
+ t ! ( :: new_category( "Foo Bar::Baz" , "foo-bar::baz" ) . create_or_update( & conn) ) ;
66
+ }
61
67
62
68
// The category and its subcategories should be in the json
63
69
let mut response = ok_resp ! ( middle. call( & mut req) ) ;
@@ -71,57 +77,83 @@ fn show() {
71
77
#[ test]
72
78
fn update_crate ( ) {
73
79
let ( _b, app, middle) = :: app ( ) ;
74
- let mut req = :: req ( app, Method :: Get , "/api/v1/categories/foo" ) ;
80
+ let mut req = :: req ( app. clone ( ) , Method :: Get , "/api/v1/categories/foo" ) ;
75
81
let cnt = |req : & mut MockRequest , cat : & str | {
76
82
req. with_path ( & format ! ( "/api/v1/categories/{}" , cat) ) ;
77
83
let mut response = ok_resp ! ( middle. call( req) ) ;
78
84
:: json :: < GoodCategory > ( & mut response) . category . crates_cnt as usize
79
85
} ;
80
- :: mock_user ( & mut req, :: user ( "foo" ) ) ;
81
- let ( krate, _) = :: mock_crate ( & mut req, :: krate ( "foocat" ) ) ;
82
- :: mock_category ( & mut req, "cat1" , "cat1" ) ;
83
- :: mock_category ( & mut req, "Category 2" , "category-2" ) ;
86
+
87
+ let krate = {
88
+ let conn = t ! ( app. diesel_database. get( ) ) ;
89
+ let user = t ! ( :: new_user( "foo" ) . create_or_update( & conn) ) ;
90
+ t ! ( :: new_category( "cat1" , "cat1" ) . create_or_update( & conn) ) ;
91
+ t ! ( :: new_category( "Category 2" , "category-2" ) . create_or_update( & conn) ) ;
92
+ :: CrateBuilder :: new ( "foo_crate" , user. id )
93
+ . expect_build ( & conn)
94
+ } ;
84
95
85
96
// Updating with no categories has no effect
86
- Category :: update_crate_old ( req. tx ( ) . unwrap ( ) , & krate, & [ ] ) . unwrap ( ) ;
97
+ {
98
+ let conn = t ! ( app. diesel_database. get( ) ) ;
99
+ Category :: update_crate ( & conn, & krate, & [ ] ) . unwrap ( ) ;
100
+ }
87
101
assert_eq ! ( cnt( & mut req, "cat1" ) , 0 ) ;
88
102
assert_eq ! ( cnt( & mut req, "category-2" ) , 0 ) ;
89
103
90
104
// Happy path adding one category
91
- Category :: update_crate_old ( req. tx ( ) . unwrap ( ) , & krate, & [ "cat1" . to_string ( ) ] ) . unwrap ( ) ;
105
+ {
106
+ let conn = t ! ( app. diesel_database. get( ) ) ;
107
+ Category :: update_crate ( & conn, & krate, & [ "cat1" ] ) . unwrap ( ) ;
108
+ }
92
109
assert_eq ! ( cnt( & mut req, "cat1" ) , 1 ) ;
93
110
assert_eq ! ( cnt( & mut req, "category-2" ) , 0 ) ;
94
111
95
112
// Replacing one category with another
96
- Category :: update_crate_old ( req. tx ( ) . unwrap ( ) , & krate, & [ "category-2" . to_string ( ) ] ) . unwrap ( ) ;
113
+ {
114
+ let conn = t ! ( app. diesel_database. get( ) ) ;
115
+ Category :: update_crate ( & conn, & krate, & [ "category-2" ] ) . unwrap ( ) ;
116
+ }
97
117
assert_eq ! ( cnt( & mut req, "cat1" ) , 0 ) ;
98
118
assert_eq ! ( cnt( & mut req, "category-2" ) , 1 ) ;
99
119
100
120
// Removing one category
101
- Category :: update_crate_old ( req. tx ( ) . unwrap ( ) , & krate, & [ ] ) . unwrap ( ) ;
121
+ {
122
+ let conn = t ! ( app. diesel_database. get( ) ) ;
123
+ Category :: update_crate ( & conn, & krate, & [ ] ) . unwrap ( ) ;
124
+ }
102
125
assert_eq ! ( cnt( & mut req, "cat1" ) , 0 ) ;
103
126
assert_eq ! ( cnt( & mut req, "category-2" ) , 0 ) ;
104
127
105
128
// Adding 2 categories
106
- Category :: update_crate_old (
107
- req. tx ( ) . unwrap ( ) ,
108
- & krate,
109
- & [ "cat1" . to_string ( ) , "category-2" . to_string ( ) ] ,
110
- ) . unwrap ( ) ;
129
+ {
130
+ let conn = t ! ( app. diesel_database. get( ) ) ;
131
+ Category :: update_crate (
132
+ & conn,
133
+ & krate,
134
+ & [ "cat1" , "category-2" ] ,
135
+ ) . unwrap ( ) ;
136
+ }
111
137
assert_eq ! ( cnt( & mut req, "cat1" ) , 1 ) ;
112
138
assert_eq ! ( cnt( & mut req, "category-2" ) , 1 ) ;
113
139
114
140
// Removing all categories
115
- Category :: update_crate_old ( req. tx ( ) . unwrap ( ) , & krate, & [ ] ) . unwrap ( ) ;
141
+ {
142
+ let conn = t ! ( app. diesel_database. get( ) ) ;
143
+ Category :: update_crate ( & conn, & krate, & [ ] ) . unwrap ( ) ;
144
+ }
116
145
assert_eq ! ( cnt( & mut req, "cat1" ) , 0 ) ;
117
146
assert_eq ! ( cnt( & mut req, "category-2" ) , 0 ) ;
118
147
119
148
// Attempting to add one valid category and one invalid category
120
- let invalid_categories = Category :: update_crate_old (
121
- req. tx ( ) . unwrap ( ) ,
122
- & krate,
123
- & [ "cat1" . to_string ( ) , "catnope" . to_string ( ) ] ,
124
- ) . unwrap ( ) ;
149
+ let invalid_categories = {
150
+ let conn = t ! ( app. diesel_database. get( ) ) ;
151
+ Category :: update_crate (
152
+ & conn,
153
+ & krate,
154
+ & [ "cat1" , "catnope" ] ,
155
+ ) . unwrap ( )
156
+ } ;
125
157
assert_eq ! ( invalid_categories, vec![ "catnope" . to_string( ) ] ) ;
126
158
assert_eq ! ( cnt( & mut req, "cat1" ) , 1 ) ;
127
159
assert_eq ! ( cnt( & mut req, "category-2" ) , 0 ) ;
@@ -135,17 +167,23 @@ fn update_crate() {
135
167
assert_eq ! ( json. meta. total, 2 ) ;
136
168
137
169
// Attempting to add a category by display text; must use slug
138
- Category :: update_crate_old ( req. tx ( ) . unwrap ( ) , & krate, & [ "Category 2" . to_string ( ) ] ) . unwrap ( ) ;
170
+ {
171
+ let conn = t ! ( app. diesel_database. get( ) ) ;
172
+ Category :: update_crate ( & conn, & krate, & [ "Category 2" ] ) . unwrap ( ) ;
173
+ }
139
174
assert_eq ! ( cnt( & mut req, "cat1" ) , 0 ) ;
140
175
assert_eq ! ( cnt( & mut req, "category-2" ) , 0 ) ;
141
176
142
177
// Add a category and its subcategory
143
- :: mock_category ( & mut req, "cat1::bar" , "cat1::bar" ) ;
144
- Category :: update_crate_old (
145
- req. tx ( ) . unwrap ( ) ,
146
- & krate,
147
- & [ "cat1" . to_string ( ) , "cat1::bar" . to_string ( ) ] ,
148
- ) . unwrap ( ) ;
178
+ {
179
+ let conn = t ! ( app. diesel_database. get( ) ) ;
180
+ t ! ( :: new_category( "cat1::bar" , "cat1::bar" ) . create_or_update( & conn) ) ;
181
+ Category :: update_crate (
182
+ & conn,
183
+ & krate,
184
+ & [ "cat1" , "cat1::bar" ] ,
185
+ ) . unwrap ( ) ;
186
+ }
149
187
assert_eq ! ( cnt( & mut req, "cat1" ) , 1 ) ;
150
188
assert_eq ! ( cnt( & mut req, "cat1::bar" ) , 1 ) ;
151
189
assert_eq ! ( cnt( & mut req, "category-2" ) , 0 ) ;
0 commit comments