33import pytest
44
55from pcapi .core import testing
6+ import pcapi .core .educational .factories as educational_factories
67import pcapi .core .offerers .factories as offerers_factories
8+ import pcapi .core .offers .factories as offers_factories
79import pcapi .core .users .factories as users_factories
810
911from tests .connectors .clickhouse import fixtures
@@ -18,10 +20,14 @@ def test_get_statistics_from_one_venue(self, run_query, client):
1820 offerers_factories .UserOffererFactory (user = user , offerer = offerer )
1921 venue = offerers_factories .VenueFactory (managingOfferer = offerer )
2022 venue_id = venue .id
23+ educational_factories .CollectiveOfferFactory (venue = venue )
24+ offers_factories .OfferFactory (venue = venue )
2125
2226 test_client = client .with_session_auth (email = user .email )
2327 num_queries = testing .AUTHENTICATION_QUERIES
2428 num_queries += 1 # select Offerer
29+ num_queries += 1 # select Offer
30+ num_queries += 1 # select CollectiveOffer
2531 with testing .assert_num_queries (num_queries ):
2632 run_query .return_value = fixtures .YEARLY_AGGREGATED_VENUE_REVENUE
2733 response = test_client .get (f"/get-statistics/?venue_ids={ venue_id } " )
@@ -44,10 +50,14 @@ def test_get_statistics_from_multiple_venues(self, run_query, client):
4450 venue2 = offerers_factories .VenueFactory (managingOfferer = offerer )
4551 venue_id = venue .id
4652 venue2_id = venue2 .id
53+ educational_factories .CollectiveOfferFactory (venue = venue )
54+ offers_factories .OfferFactory (venue = venue )
4755
4856 test_client = client .with_session_auth (email = user .email )
4957 num_queries = testing .AUTHENTICATION_QUERIES
5058 num_queries += 1 # select Offerer
59+ num_queries += 1 # select Offer
60+ num_queries += 1 # select CollectiveOffer
5161 with testing .assert_num_queries (num_queries ):
5262 run_query .return_value = fixtures .YEARLY_AGGREGATED_VENUE_REVENUE
5363 response = test_client .get (f"/get-statistics/?venue_ids={ venue_id } &venue_ids={ venue2_id } " )
@@ -70,10 +80,14 @@ def test_get_statistics_multiple_years(self, run_query, client):
7080 venue2 = offerers_factories .VenueFactory (managingOfferer = offerer )
7181 venue_id = venue .id
7282 venue2_id = venue2 .id
83+ educational_factories .CollectiveOfferFactory (venue = venue )
84+ offers_factories .OfferFactory (venue = venue )
7385
7486 test_client = client .with_session_auth (email = user .email )
7587 num_queries = testing .AUTHENTICATION_QUERIES
7688 num_queries += 1 # select Offerer
89+ num_queries += 1 # select Offer
90+ num_queries += 1 # select CollectiveOffer
7791 with testing .assert_num_queries (num_queries ):
7892 run_query .return_value = fixtures .YEARLY_AGGREGATED_VENUE_REVENUE_MULTIPLE_YEARS
7993 response = test_client .get (f"/get-statistics/?venue_ids={ venue_id } &venue_ids={ venue2_id } " )
@@ -92,16 +106,84 @@ def test_get_statistics_multiple_years(self, run_query, client):
92106 }
93107 }
94108
109+ @patch ("pcapi.connectors.clickhouse.testing_backend.TestingBackend.run_query" )
110+ def test_get_statistics_only_collective (self , run_query , client ):
111+ user = users_factories .UserFactory ()
112+ offerer = offerers_factories .OffererFactory ()
113+ offerers_factories .UserOffererFactory (user = user , offerer = offerer )
114+ venue = offerers_factories .VenueFactory (managingOfferer = offerer )
115+ venue_id = venue .id
116+ educational_factories .CollectiveOfferFactory (venue = venue )
117+
118+ test_client = client .with_session_auth (email = user .email )
119+ num_queries = testing .AUTHENTICATION_QUERIES
120+ num_queries += 1 # select Offerer
121+ num_queries += 1 # select Offer
122+ num_queries += 1 # select CollectiveOffer
123+ with testing .assert_num_queries (num_queries ):
124+ run_query .return_value = fixtures .YEARLY_AGGREGATED_VENUE_REVENUE_MULTIPLE_YEARS_ONLY_COLLECTIVE
125+ response = test_client .get (f"/get-statistics/?venue_ids={ venue_id } " )
126+ assert response .status_code == 200
127+ assert response .json == {
128+ "incomeByYear" : {
129+ "2022" : {
130+ "expectedRevenue" : {"collective" : 22.12 },
131+ "revenue" : {"collective" : 22.12 },
132+ },
133+ "2023" : {},
134+ "2024" : {
135+ "expectedRevenue" : {"collective" : 13.12 },
136+ "revenue" : {"collective" : 12.12 },
137+ },
138+ }
139+ }
140+
141+ @patch ("pcapi.connectors.clickhouse.testing_backend.TestingBackend.run_query" )
142+ def test_get_statistics_only_individual (self , run_query , client ):
143+ user = users_factories .UserFactory ()
144+ offerer = offerers_factories .OffererFactory ()
145+ offerers_factories .UserOffererFactory (user = user , offerer = offerer )
146+ venue = offerers_factories .VenueFactory (managingOfferer = offerer )
147+ venue_id = venue .id
148+ offers_factories .OfferFactory (venue = venue )
149+
150+ test_client = client .with_session_auth (email = user .email )
151+ num_queries = testing .AUTHENTICATION_QUERIES
152+ num_queries += 1 # select Offerer
153+ num_queries += 1 # select Offer
154+ num_queries += 1 # select CollectiveOffer
155+ with testing .assert_num_queries (num_queries ):
156+ run_query .return_value = fixtures .YEARLY_AGGREGATED_VENUE_REVENUE_MULTIPLE_YEARS_ONLY_INDIVIDUAL
157+ response = test_client .get (f"/get-statistics/?venue_ids={ venue_id } " )
158+ assert response .status_code == 200
159+ assert response .json == {
160+ "incomeByYear" : {
161+ "2022" : {
162+ "expectedRevenue" : {"individual" : 22.12 },
163+ "revenue" : {"individual" : 22.12 },
164+ },
165+ "2023" : {},
166+ "2024" : {
167+ "expectedRevenue" : {"individual" : 13.12 },
168+ "revenue" : {"individual" : 12.12 },
169+ },
170+ }
171+ }
172+
95173 def test_get_statistics_empty_result (self , client ):
96174 user = users_factories .UserFactory ()
97175 offerer = offerers_factories .OffererFactory ()
98176 offerers_factories .UserOffererFactory (user = user , offerer = offerer )
99177 venue = offerers_factories .VenueFactory (managingOfferer = offerer )
100178 venue_id = venue .id
179+ educational_factories .CollectiveOfferFactory (venue = venue )
180+ offers_factories .OfferFactory (venue = venue )
101181
102182 test_client = client .with_session_auth (email = user .email )
103183 num_queries = testing .AUTHENTICATION_QUERIES
104184 num_queries += 1 # select Offerer
185+ num_queries += 1 # select Offer
186+ num_queries += 1 # select CollectiveOffer
105187 with testing .assert_num_queries (num_queries ):
106188 response = test_client .get (f"/get-statistics/?venue_ids={ venue_id } " )
107189 assert response .status_code == 200
@@ -129,17 +211,18 @@ def test_get_statistics_with_no_venue_id_should_fail(self, client):
129211class Returns403Test :
130212 def test_get_statistics_from_not_owned_venue_should_fail (self , client ):
131213 user = users_factories .UserFactory ()
132- user2 = users_factories .UserFactory ()
133214 offerer = offerers_factories .OffererFactory ()
134- offerers_factories .UserOffererFactory (user = user2 , offerer = offerer )
215+ offerers_factories .UserOffererFactory (user = user , offerer = offerer )
135216 venue = offerers_factories .VenueFactory (managingOfferer = offerer )
217+ venue_not_belonging_to_user = offerers_factories .VenueFactory ()
136218 venue_id = venue .id
219+ foreign_venue = venue_not_belonging_to_user .id
137220
138221 test_client = client .with_session_auth (email = user .email )
139222 num_queries = testing .AUTHENTICATION_QUERIES
140223 num_queries += 1 # select Offerer
141224 with testing .assert_num_queries (num_queries ):
142- response = test_client .get (f"/get-statistics/?venue_ids={ venue_id } " )
225+ response = test_client .get (f"/get-statistics/?venue_ids={ venue_id } &venue_ids= { foreign_venue } " )
143226 assert response .status_code == 403
144227 assert response .json ["global" ] == [
145228 "Vous n'avez pas les droits d'accès suffisants pour accéder à cette information."
0 commit comments