66# SPDX-License-Identifier: EPL-2.0
77# *******************************************************************************
88
9- from collections . abc import Mapping
10- from typing import Any
9+ import pretend
10+ import pytest
1111
12- from otterdog .jsonnet import JsonnetConfig
13- from otterdog .models import ModelObject
14- from otterdog .models .repository import Repository
12+ from otterdog .models .repository import LivePatch , Repository
1513from otterdog .utils import UNSET , Change , query_json
1614
17- from . import ModelTest
1815
19-
20- class RepositoryTest (ModelTest ):
21- def create_model (self , data : Mapping [str , Any ]) -> ModelObject :
22- return Repository .from_model_data (data )
23-
24- @property
25- def template_function (self ) -> str :
26- return JsonnetConfig .create_repo
27-
28- @property
29- def model_data (self ):
30- return self .load_json_resource ("otterdog-repo.json" )
31-
32- @property
33- def provider_data (self ):
34- return self .load_json_resource ("github-repo.json" )
35-
36- def test_load_from_model (self ):
37- repo = Repository .from_model_data (self .model_data )
16+ class TestRepository :
17+ def test_load_from_model (self , repository_test ):
18+ repo = Repository .from_model_data (repository_test .model_data )
3819
3920 assert repo .name == "otterdog-defaults"
4021 assert repo .description is None
@@ -65,8 +46,8 @@ def test_load_from_model(self):
6546 assert repo .post_process_template_content == []
6647 assert repo .auto_init is False
6748
68- def test_load_from_provider (self ):
69- repo = Repository .from_provider_data (self .org_id , self .provider_data )
49+ def test_load_from_provider (self , repository_test ):
50+ repo = Repository .from_provider_data (repository_test .org_id , repository_test .provider_data )
7051
7152 assert repo .id == 605555050
7253 assert repo .node_id == "R_kgDOJBgJag"
@@ -95,22 +76,22 @@ def test_load_from_provider(self):
9576 assert repo .secret_scanning_push_protection == "disabled"
9677 assert repo .dependabot_alerts_enabled is True
9778
98- async def test_to_provider (self ):
99- repo = Repository .from_model_data (self .model_data )
79+ async def test_to_provider (self , repository_test ):
80+ repo = Repository .from_model_data (repository_test .model_data )
10081
10182 repo .description = UNSET
10283
103- provider_data = await repo .to_provider_data (self .org_id , self .provider )
84+ provider_data = await repo .to_provider_data (repository_test .org_id , repository_test .provider )
10485
10586 assert len (provider_data ) == 22
10687 assert provider_data ["name" ] == "otterdog-defaults"
10788 assert provider_data .get ("description" ) is None
10889
10990 assert query_json ("security_and_analysis.secret_scanning.status" , provider_data ) or "" == "enabled"
11091
111- async def test_changes_to_provider (self ):
112- current = Repository .from_model_data (self .model_data )
113- other = Repository .from_model_data (self .model_data )
92+ async def test_changes_to_provider (self , repository_test ):
93+ current = Repository .from_model_data (repository_test .model_data )
94+ other = Repository .from_model_data (repository_test .model_data )
11495
11596 other .name = "other"
11697 other .has_wiki = False
@@ -124,10 +105,10 @@ async def test_changes_to_provider(self):
124105 assert provider_data ["has_wiki" ] is True
125106 assert query_json ("security_and_analysis.secret_scanning.status" , provider_data ) or "" == "enabled"
126107
127- def test_patch (self ):
128- current = Repository .from_model_data (self .model_data )
108+ def test_patch (self , repository_test ):
109+ current = Repository .from_model_data (repository_test .model_data )
129110
130- default = Repository .from_model_data (self .model_data )
111+ default = Repository .from_model_data (repository_test .model_data )
131112
132113 default .name = None
133114 default .web_commit_signoff_required = True
@@ -138,9 +119,9 @@ def test_patch(self):
138119 assert patch ["name" ] == current .name
139120 assert patch ["web_commit_signoff_required" ] is current .web_commit_signoff_required
140121
141- def test_difference (self ):
142- current = Repository .from_model_data (self .model_data )
143- other = Repository .from_model_data (self .model_data )
122+ def test_difference (self , repository_test ):
123+ current = Repository .from_model_data (repository_test .model_data )
124+ other = Repository .from_model_data (repository_test .model_data )
144125
145126 other .name = "other"
146127 other .has_wiki = False
@@ -150,3 +131,57 @@ def test_difference(self):
150131 assert len (diff ) == 2
151132 assert diff ["name" ] == Change (other .name , current .name )
152133 assert diff ["has_wiki" ] == Change (other .has_wiki , current .has_wiki )
134+
135+ @pytest .mark .parametrize (
136+ "gh_pages_source_path, gh_pages_source_branch, expected_changes" ,
137+ [
138+ (
139+ "/docs" ,
140+ None ,
141+ {
142+ "gh_pages_source_path" : Change ("/" , "/docs" ),
143+ "gh_pages_source_branch" : Change ("gh-pages" , "gh-pages" ),
144+ },
145+ ),
146+ (
147+ None ,
148+ "main" ,
149+ {"gh_pages_source_branch" : Change ("gh-pages" , "main" ), "gh_pages_source_path" : Change ("/" , "/" )},
150+ ),
151+ (None , None , {}),
152+ (
153+ "/docs" ,
154+ "main" ,
155+ {"gh_pages_source_path" : Change ("/" , "/docs" ), "gh_pages_source_branch" : Change ("gh-pages" , "main" )},
156+ ),
157+ ],
158+ )
159+ def test__include_gh_pages_patch_required_properties (
160+ self , repository_test , gh_pages_source_path , gh_pages_source_branch , expected_changes
161+ ):
162+ current = Repository .from_model_data (repository_test .model_data )
163+ default = Repository .from_model_data (repository_test .model_data )
164+
165+ # build changes using parametrization if not none
166+ changes = {}
167+ if gh_pages_source_path is not None :
168+ current .gh_pages_source_path = gh_pages_source_path
169+ changes ["gh_pages_source_path" ] = Change (default .gh_pages_source_path , gh_pages_source_path )
170+ if gh_pages_source_branch is not None :
171+ current .gh_pages_source_branch = gh_pages_source_branch
172+ changes ["gh_pages_source_branch" ] = Change (default .gh_pages_source_branch , gh_pages_source_branch )
173+
174+ test_livepatch = LivePatch (
175+ patch_type = 3 ,
176+ expected_object = current ,
177+ current_object = default ,
178+ changes = changes ,
179+ parent_object = None ,
180+ forced_update = False ,
181+ fn = pretend .stub (),
182+ changes_object_to_readonly = False ,
183+ )
184+ # Call the function under test
185+ current ._include_gh_pages_patch_required_properties (test_livepatch )
186+
187+ assert test_livepatch .changes == expected_changes
0 commit comments