44from core .services import set_like
55from feed .services import create_news_for_model
66from feed .tests .helpers import create_vacancy
7- from news .tests .helpers import create_news_for , create_project , create_user
7+ from news .tests .helpers import (
8+ create_news_for ,
9+ create_partner_program ,
10+ create_project ,
11+ create_user ,
12+ )
813
914
1015class FeedAPITests (TestCase ):
@@ -20,6 +25,7 @@ def test_feed_returns_user_news_when_news_filter_requested(self):
2025
2126 self .assertEqual (response .status_code , 200 )
2227 item = response .data ["results" ][0 ]
28+ self .assertEqual (set (item .keys ()), {"type_model" , "content" })
2329 self .assertEqual (item ["type_model" ], "news" )
2430 self .assertEqual (item ["content" ]["id" ], news .id )
2531 self .assertEqual (item ["content" ]["text" ], "User feed news" )
@@ -32,10 +38,24 @@ def test_feed_returns_project_news_as_news_content(self):
3238
3339 self .assertEqual (response .status_code , 200 )
3440 item = response .data ["results" ][0 ]
41+ self .assertEqual (set (item .keys ()), {"type_model" , "content" })
3542 self .assertEqual (item ["type_model" ], "news" )
3643 self .assertEqual (item ["content" ]["id" ], news .id )
3744 self .assertEqual (item ["content" ]["text" ], "Project feed news" )
3845
46+ def test_feed_returns_program_news_as_news_content (self ):
47+ program = create_partner_program (name = "Feed program" )
48+ news = create_news_for (program , text = "Program feed news" )
49+
50+ response = self .client .get ("/feed/?type=partnerprogram" )
51+
52+ self .assertEqual (response .status_code , 200 )
53+ item = response .data ["results" ][0 ]
54+ self .assertEqual (set (item .keys ()), {"type_model" , "content" })
55+ self .assertEqual (item ["type_model" ], "news" )
56+ self .assertEqual (item ["content" ]["id" ], news .id )
57+ self .assertEqual (item ["content" ]["text" ], "Program feed news" )
58+
3959 def test_feed_returns_project_feed_record_as_project_content (self ):
4060 project = create_project (name = "Feed record project" )
4161 create_news_for_model (project )
@@ -44,6 +64,7 @@ def test_feed_returns_project_feed_record_as_project_content(self):
4464
4565 self .assertEqual (response .status_code , 200 )
4666 item = response .data ["results" ][0 ]
67+ self .assertEqual (set (item .keys ()), {"type_model" , "content" })
4768 self .assertEqual (item ["type_model" ], "project" )
4869 self .assertEqual (item ["content" ]["id" ], project .id )
4970
@@ -54,10 +75,59 @@ def test_feed_returns_vacancy_feed_record_as_vacancy_content(self):
5475
5576 self .assertEqual (response .status_code , 200 )
5677 item = response .data ["results" ][0 ]
78+ self .assertEqual (set (item .keys ()), {"type_model" , "content" })
5779 self .assertEqual (item ["type_model" ], "vacancy" )
5880 self .assertEqual (item ["content" ]["id" ], vacancy .id )
5981 self .assertEqual (item ["content" ]["role" ], "Backend developer" )
6082
83+ def test_feed_combines_all_supported_filters (self ):
84+ project_news = create_news_for (
85+ create_project (name = "Combined project news" ),
86+ text = "Combined project news" ,
87+ )
88+ program_news = create_news_for (
89+ create_partner_program (name = "Combined program" ),
90+ text = "Combined program news" ,
91+ )
92+ user_news = create_news_for (self .user , text = "Combined user news" )
93+ project = create_project (name = "Combined project record" )
94+ vacancy = create_vacancy (role = "Combined vacancy" )
95+ create_news_for_model (project )
96+
97+ response = self .client .get (
98+ "/feed/?type=project|vacancy|news|partnerprogram"
99+ )
100+
101+ self .assertEqual (response .status_code , 200 )
102+ items_by_text = {
103+ item ["content" ].get ("text" ): item
104+ for item in response .data ["results" ]
105+ if item ["type_model" ] == "news"
106+ }
107+ content_ids_by_type = {
108+ type_model : {
109+ item ["content" ]["id" ]
110+ for item in response .data ["results" ]
111+ if item ["type_model" ] == type_model
112+ }
113+ for type_model in ["project" , "vacancy" ]
114+ }
115+
116+ self .assertEqual (
117+ items_by_text [project_news .text ]["content" ]["id" ],
118+ project_news .id ,
119+ )
120+ self .assertEqual (
121+ items_by_text [program_news .text ]["content" ]["id" ],
122+ program_news .id ,
123+ )
124+ self .assertEqual (
125+ items_by_text [user_news .text ]["content" ]["id" ],
126+ user_news .id ,
127+ )
128+ self .assertIn (project .id , content_ids_by_type ["project" ])
129+ self .assertIn (vacancy .id , content_ids_by_type ["vacancy" ])
130+
61131 def test_feed_excludes_feed_record_for_inactive_vacancy (self ):
62132 vacancy = create_vacancy (role = "Inactive vacancy" , is_active = False )
63133 create_news_for_model (vacancy )
0 commit comments