11import pytest
22
33from api .base .settings .defaults import API_BASE
4- from osf_tests .factories import AuthUserFactory , NotificationSubscriptionLegacyFactory
5-
4+ from osf_tests .factories import (
5+ AuthUserFactory ,
6+ NotificationSubscriptionFactory
7+ )
68
79@pytest .mark .django_db
810class TestSubscriptionDetail :
@@ -16,18 +18,18 @@ def user_no_auth(self):
1618 return AuthUserFactory ()
1719
1820 @pytest .fixture ()
19- def global_user_notification (self , user ):
20- notification = NotificationSubscriptionLegacyFactory ( _id = f' { user . _id } _global' , user = user , event_name = 'global' )
21- notification . add_user_to_subscription ( user , 'email_transactional' )
22- return notification
21+ def notification (self , user ):
22+ return NotificationSubscriptionFactory (
23+ user = user ,
24+ )
2325
2426 @pytest .fixture ()
25- def url (self , global_user_notification ):
26- return f'/{ API_BASE } subscriptions/{ global_user_notification . _id } /'
27+ def url (self , notification ):
28+ return f'/{ API_BASE } subscriptions/{ notification . id } /'
2729
2830 @pytest .fixture ()
2931 def url_invalid (self ):
30- return '/{}subscriptions/{}/' . format ( API_BASE , ' invalid-notification-id' )
32+ return f '/{ API_BASE } subscriptions/invalid-notification-id/'
3133
3234 @pytest .fixture ()
3335 def payload (self ):
@@ -51,56 +53,101 @@ def payload_invalid(self):
5153 }
5254 }
5355
54- def test_subscription_detail (self , app , user , user_no_auth , global_user_notification , url , url_invalid , payload , payload_invalid ):
55- # GET with valid notification_id
56- # Invalid user
57- res = app .get (url , auth = user_no_auth .auth , expect_errors = True )
56+ def test_subscription_detail_invalid_user (
57+ self , app , user , user_no_auth , notification , url , url_invalid , payload , payload_invalid
58+ ):
59+ res = app .get (
60+ url ,
61+ auth = user_no_auth .auth ,
62+ expect_errors = True
63+ )
5864 assert res .status_code == 403
59- # No user
60- res = app .get (url , expect_errors = True )
65+
66+ def test_subscription_detail_no_user (
67+ self , app , user , user_no_auth , notification , url , url_invalid , payload , payload_invalid
68+ ):
69+ res = app .get (
70+ url ,
71+ expect_errors = True
72+ )
6173 assert res .status_code == 401
62- # Valid user
74+
75+ def test_subscription_detail_valid_user (
76+ self , app , user , user_no_auth , notification , url , url_invalid , payload , payload_invalid
77+ ):
78+
6379 res = app .get (url , auth = user .auth )
6480 notification_id = res .json ['data' ]['id' ]
6581 assert res .status_code == 200
66- assert notification_id == f' { user . _id } _global'
82+ assert notification_id == str ( notification . id )
6783
68- # GET with invalid notification_id
69- # No user
84+ def test_subscription_detail_invalid_notification_id_no_user (
85+ self , app , user , user_no_auth , notification , url , url_invalid , payload , payload_invalid
86+ ):
7087 res = app .get (url_invalid , expect_errors = True )
7188 assert res .status_code == 404
72- # Existing user
73- res = app .get (url_invalid , auth = user .auth , expect_errors = True )
89+
90+ def test_subscription_detail_invalid_notification_id_existing_user (
91+ self , app , user , user_no_auth , notification , url , url_invalid , payload , payload_invalid
92+ ):
93+ res = app .get (
94+ url_invalid ,
95+ auth = user .auth ,
96+ expect_errors = True
97+ )
7498 assert res .status_code == 404
7599
76- # PATCH with valid notification_id and invalid data
77- # Invalid user
100+ def test_subscription_detail_invalid_payload_403 (
101+ self , app , user , user_no_auth , notification , url , url_invalid , payload , payload_invalid
102+ ):
78103 res = app .patch_json_api (url , payload_invalid , auth = user_no_auth .auth , expect_errors = True )
79104 assert res .status_code == 403
80- # No user
105+
106+ def test_subscription_detail_invalid_payload_401 (
107+ self , app , user , user_no_auth , notification , url , url_invalid , payload , payload_invalid
108+ ):
81109 res = app .patch_json_api (url , payload_invalid , expect_errors = True )
82110 assert res .status_code == 401
83- # Valid user
84- res = app .patch_json_api (url , payload_invalid , auth = user .auth , expect_errors = True )
111+
112+ def test_subscription_detail_invalid_payload_400 (
113+ self , app , user , user_no_auth , notification , url , url_invalid , payload , payload_invalid
114+ ):
115+ res = app .patch_json_api (
116+ url ,
117+ payload_invalid ,
118+ auth = user .auth ,
119+ expect_errors = True
120+ )
85121 assert res .status_code == 400
86- assert res .json ['errors' ][0 ]['detail' ] == 'Invalid frequency "invalid-frequency"'
122+ assert res .json ['errors' ][0 ]['detail' ] == '"invalid-frequency" is not a valid choice. '
87123
88- # PATCH with invalid notification_id
89- # No user
124+ def test_subscription_detail_patch_invalid_notification_id_no_user (
125+ self , app , user , user_no_auth , notification , url , url_invalid , payload , payload_invalid
126+ ):
90127 res = app .patch_json_api (url_invalid , payload , expect_errors = True )
91128 assert res .status_code == 404
92- # Existing user
129+
130+ def test_subscription_detail_patch_invalid_notification_id_existing_user (
131+ self , app , user , user_no_auth , notification , url , url_invalid , payload , payload_invalid
132+ ):
93133 res = app .patch_json_api (url_invalid , payload , auth = user .auth , expect_errors = True )
94134 assert res .status_code == 404
95135
96- # PATCH with valid notification_id and valid data
97- # Invalid user
136+ def test_subscription_detail_patch_invalid_user (
137+ self , app , user , user_no_auth , notification , url , url_invalid , payload , payload_invalid
138+ ):
98139 res = app .patch_json_api (url , payload , auth = user_no_auth .auth , expect_errors = True )
99140 assert res .status_code == 403
100- # No user
141+
142+ def test_subscription_detail_patch_no_user (
143+ self , app , user , user_no_auth , notification , url , url_invalid , payload , payload_invalid
144+ ):
101145 res = app .patch_json_api (url , payload , expect_errors = True )
102146 assert res .status_code == 401
103- # Valid user
147+
148+ def test_subscription_detail_patch (
149+ self , app , user , user_no_auth , notification , url , url_invalid , payload , payload_invalid
150+ ):
104151 res = app .patch_json_api (url , payload , auth = user .auth )
105152 assert res .status_code == 200
106153 assert res .json ['data' ]['attributes' ]['frequency' ] == 'none'
0 commit comments