@@ -71,6 +71,59 @@ def test_lookup_fails_invalid_ci_config_ref_uri(self, environment):
71
71
):
72
72
gitlab .GitLabPublisher .lookup_by_claims (pretend .stub (), signed_claims )
73
73
74
+ @pytest .mark .parametrize ("environment" , ["SomeEnvironment" , "SOME_ENVIRONMENT" ])
75
+ def test_lookup_succeeds_with_non_lowercase_environment (
76
+ self , db_request , environment
77
+ ):
78
+ # Test that we find a matching publisher when the environment claims match
79
+ # If we incorrectly normalized the incoming capitalized claim, we wouldn't
80
+ # find the matching publisher.
81
+ stored_publisher = GitLabPublisherFactory (
82
+ id = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" ,
83
+ namespace = "foo" ,
84
+ project = "bar" ,
85
+ workflow_filepath = ".gitlab-ci.yml" ,
86
+ environment = environment ,
87
+ )
88
+
89
+ signed_claims = {
90
+ "project_path" : "foo/bar" ,
91
+ "ci_config_ref_uri" : ("gitlab.com/foo/bar//.gitlab-ci.yml@refs/heads/main" ),
92
+ "environment" : environment ,
93
+ }
94
+
95
+ publisher = gitlab .GitLabPublisher .lookup_by_claims (
96
+ db_request .db , signed_claims
97
+ )
98
+
99
+ assert publisher .id == stored_publisher .id
100
+ assert publisher .environment == environment
101
+
102
+ @pytest .mark .parametrize ("environment" , ["SomeEnvironment" , "SOME_ENVIRONMENT" ])
103
+ def test_lookup_is_case_sensitive_for_environment (self , db_request , environment ):
104
+ # Test that we don't find a matching publisher when the environment claims don't
105
+ # exactly match.
106
+ # If we incorrectly normalized the incoming capitalized claim, we would match
107
+ # a publisher that has a different environment.
108
+ GitLabPublisherFactory (
109
+ id = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" ,
110
+ namespace = "foo" ,
111
+ project = "bar" ,
112
+ workflow_filepath = ".gitlab-ci.yml" ,
113
+ # stored environment is all lowercase, doesn't match incoming claims
114
+ environment = environment .lower (),
115
+ )
116
+
117
+ signed_claims = {
118
+ "project_path" : "foo/bar" ,
119
+ "ci_config_ref_uri" : ("gitlab.com/foo/bar//.gitlab-ci.yml@refs/heads/main" ),
120
+ "environment" : environment ,
121
+ }
122
+
123
+ with pytest .raises (errors .InvalidPublisherError ) as e :
124
+ gitlab .GitLabPublisher .lookup_by_claims (db_request .db , signed_claims )
125
+ assert str (e .value ) == "Publisher with matching claims was not found"
126
+
74
127
@pytest .mark .parametrize ("environment" , ["" , "some_environment" ])
75
128
@pytest .mark .parametrize (
76
129
("workflow_filepath_a" , "workflow_filepath_b" ),
0 commit comments