@@ -7,6 +7,7 @@ use conduit_test::MockRequest;
7
7
use cargo_registry:: krate:: EncodableCrate ;
8
8
use cargo_registry:: user:: { User , EncodableUser } ;
9
9
use cargo_registry:: db:: RequestTransaction ;
10
+ use cargo_registry:: version:: EncodableVersion ;
10
11
11
12
#[ deriving( Decodable ) ]
12
13
struct AuthResponse { url : String , state : String }
@@ -106,3 +107,52 @@ fn my_packages() {
106
107
let response: Response = :: json ( & mut response) ;
107
108
assert_eq ! ( response. crates. len( ) , 1 ) ;
108
109
}
110
+
111
+ #[ test]
112
+ fn following ( ) {
113
+ #[ deriving( Decodable ) ]
114
+ struct R {
115
+ versions : Vec < EncodableVersion > ,
116
+ meta : Meta ,
117
+ }
118
+ #[ deriving( Decodable ) ] struct Meta { more : bool }
119
+
120
+ let ( _b, app, middle) = :: app ( ) ;
121
+ let mut req = :: req ( app, conduit:: Get , "/" ) ;
122
+ :: mock_user ( & mut req, :: user ( ) ) ;
123
+ :: mock_crate ( & mut req, "foo" ) ;
124
+ :: mock_crate ( & mut req, "bar" ) ;
125
+
126
+ let mut response = ok_resp ! ( middle. call( req. with_path( "/me/updates" )
127
+ . with_method( conduit:: Get ) ) ) ;
128
+ let r = :: json :: < R > ( & mut response) ;
129
+ assert_eq ! ( r. versions. len( ) , 0 ) ;
130
+ assert_eq ! ( r. meta. more, false ) ;
131
+
132
+ ok_resp ! ( middle. call( req. with_path( "/crates/foo/follow" )
133
+ . with_method( conduit:: Put ) ) ) ;
134
+ ok_resp ! ( middle. call( req. with_path( "/crates/bar/follow" )
135
+ . with_method( conduit:: Put ) ) ) ;
136
+
137
+ let mut response = ok_resp ! ( middle. call( req. with_path( "/me/updates" )
138
+ . with_method( conduit:: Get ) ) ) ;
139
+ let r = :: json :: < R > ( & mut response) ;
140
+ assert_eq ! ( r. versions. len( ) , 2 ) ;
141
+ assert_eq ! ( r. meta. more, false ) ;
142
+
143
+ let mut response = ok_resp ! ( middle. call( req. with_path( "/me/updates" )
144
+ . with_method( conduit:: Get )
145
+ . with_query( "per_page=1" ) ) ) ;
146
+ let r = :: json :: < R > ( & mut response) ;
147
+ assert_eq ! ( r. versions. len( ) , 1 ) ;
148
+ assert_eq ! ( r. meta. more, true ) ;
149
+
150
+ ok_resp ! ( middle. call( req. with_path( "/crates/bar/unfollow" )
151
+ . with_method( conduit:: Put ) ) ) ;
152
+ let mut response = ok_resp ! ( middle. call( req. with_path( "/me/updates" )
153
+ . with_method( conduit:: Get )
154
+ . with_query( "page=2&per_page=1" ) ) ) ;
155
+ let r = :: json :: < R > ( & mut response) ;
156
+ assert_eq ! ( r. versions. len( ) , 0 ) ;
157
+ assert_eq ! ( r. meta. more, false ) ;
158
+ }
0 commit comments