33from process_report .models import nonbillable_models
44
55
6- @pytest .mark .parametrize (
7- "projects_data" ,
8- [
9- [
10- {
11- "name" : "ProjectA" ,
12- "clusters" : [{"name" : "Cluster1" }, {"name" : "Cluster2" }],
13- },
14- {
15- "name" : "ProjectB" ,
16- "clusters" : [
17- {"name" : "Cluster1" , "start" : "2023-01" , "end" : "2023-12" }
18- ],
19- },
20- {"name" : "ProjectC" , "start" : "2023-06" , "end" : "2023-07" },
21- {
22- "name" : "ProjectD" ,
23- "is_billable" : True ,
24- "clusters" : [
25- {"name" : "Cluster1" , "start" : "2023-05" , "end" : "2023-09" },
26- {"name" : "Cluster2" , "start" : "2023-05" , "end" : "2023-11" },
27- ],
28- },
29- {"name" : "ProjectE" },
30- ],
31- ],
32- )
33- def test_timed_projects (mocker , projects_data ):
34- mocker .patch (
6+ @pytest .fixture
7+ def sample_project_list ():
8+ return [
9+ {
10+ "name" : "ProjectA" ,
11+ "clusters" : [{"name" : "Cluster1" }, {"name" : "Cluster2" }],
12+ },
13+ {
14+ "name" : "ProjectB" ,
15+ "clusters" : [{"name" : "Cluster1" , "start" : "2023-01" , "end" : "2023-12" }],
16+ },
17+ {"name" : "ProjectC" , "start" : "2023-06" , "end" : "2023-07" },
18+ {
19+ "name" : "ProjectD" ,
20+ "is_billable" : True ,
21+ "clusters" : [
22+ {"name" : "Cluster1" , "start" : "2023-05" , "end" : "2023-09" },
23+ {"name" : "Cluster2" , "start" : "2023-05" , "end" : "2023-11" },
24+ ],
25+ },
26+ {"name" : "ProjectE" },
27+ ]
28+
29+
30+ @pytest .fixture
31+ def mock_allowed_clusters (mocker ):
32+ return mocker .patch (
3533 "process_report.models.nonbillable_models.get_allowed_clusters" ,
3634 return_value = {"Cluster1" , "Cluster2" },
3735 )
38- projects = nonbillable_models .ExcludedProjectList .model_validate (projects_data )
36+
37+
38+ def test_timed_projects (mock_allowed_clusters , sample_project_list ):
39+ projects = nonbillable_models .ExcludedProjectList .model_validate (
40+ sample_project_list
41+ )
3942 result = projects .get_nonbillable_projects ("2023-09" )
4043 timed = [(name , cluster ) for name , cluster , is_timed , _ in result if is_timed ]
4144 expected = [
@@ -46,39 +49,10 @@ def test_timed_projects(mocker, projects_data):
4649 assert timed == expected
4750
4851
49- @pytest .mark .parametrize (
50- "projects_data" ,
51- [
52- [
53- {
54- "name" : "ProjectA" ,
55- "clusters" : [{"name" : "Cluster1" }, {"name" : "Cluster2" }],
56- },
57- {
58- "name" : "ProjectB" ,
59- "clusters" : [
60- {"name" : "Cluster1" , "start" : "2023-01" , "end" : "2023-12" }
61- ],
62- },
63- {"name" : "ProjectC" , "start" : "2023-06" , "end" : "2023-07" },
64- {
65- "name" : "ProjectD" ,
66- "is_billable" : True ,
67- "clusters" : [
68- {"name" : "Cluster1" , "start" : "2023-05" , "end" : "2023-09" },
69- {"name" : "Cluster2" , "start" : "2023-05" , "end" : "2023-11" },
70- ],
71- },
72- {"name" : "ProjectE" },
73- ],
74- ],
75- )
76- def test_nonbillable_projects (mocker , projects_data ):
77- mocker .patch (
78- "process_report.models.nonbillable_models.get_allowed_clusters" ,
79- return_value = {"Cluster1" , "Cluster2" },
52+ def test_nonbillable_projects (mock_allowed_clusters , sample_project_list ):
53+ projects = nonbillable_models .ExcludedProjectList .model_validate (
54+ sample_project_list
8055 )
81- projects = nonbillable_models .ExcludedProjectList .model_validate (projects_data )
8256 result = projects .get_nonbillable_projects ("2023-09" )
8357 expected = [
8458 ("ProjectA" , "Cluster1" , False , False ),
0 commit comments