33import pytest
44from faker import Faker
55
6- from zoo .repos .models import Provider , Repository
6+ from zoo .repos .models import Provider , Repository , RepositoryEnvironment
77from zoo .repos .tasks import sync_repos
88
99pytestmark = pytest .mark .django_db
1010
1111
12+ class FakeGitlabEnviroment :
13+ def __init__ (self , id = None , name = None , external_url = None , slug = None ):
14+ self .fake = Faker ()
15+ self .id = self .fake .pyint () if id is None else id
16+ self .name = self .fake .word () if name is None else name
17+ self .slug = self .fake .word () if slug is None else slug
18+ self .external_url = self .fake .url () if external_url is None else external_url
19+ self .state = "available"
20+
21+
1222class FakeGitProject :
1323 def __init__ (self , pid ):
1424 self .fake = Faker ()
@@ -53,38 +63,58 @@ def generate_project_list(pid=None, owner=None, name=None, url=None, **kwargs):
5363 }
5464
5565
66+ def generate_proj_envs_list ():
67+ return [FakeGitlabEnviroment ()]
68+
69+
5670def test_sync_untouched_repo (repository ):
5771 project_list = generate_project_list (
5872 repository .remote_id , repository .owner , repository .name , repository .url
5973 )
74+ gitlab_envs = generate_proj_envs_list ()
6075 with patch (
6176 "gitlab.v4.objects.ProjectManager.list" , return_value = project_list ["gitlab" ]
6277 ), patch (
6378 "github.AuthenticatedUser.AuthenticatedUser.get_repos" ,
6479 return_value = project_list ["github" ],
80+ ), patch (
81+ "zoo.repos.tasks.get_project_enviroments" ,
82+ return_value = gitlab_envs ,
6583 ):
6684 sync_repos ()
6785
6886 gitlab_project = project_list ["gitlab" ][0 ]
69- assert gitlab_project .id == repository .remote_id
87+ repository = Repository .objects .get (
88+ remote_id = gitlab_project .id , provider = Provider .GITLAB .value
89+ )
7090 assert gitlab_project .namespace ["full_path" ] == repository .owner
7191 assert gitlab_project .path == repository .name
7292 assert gitlab_project .web_url == repository .url
7393
94+ repo_env = repository .repository_environments .first ()
95+ assert gitlab_envs [0 ].name == repo_env .name
96+ assert gitlab_envs [0 ].external_url == repo_env .external_url
97+
7498 github_project = project_list ["github" ][0 ]
75- assert github_project .id == repository .remote_id + 1
99+ repository = Repository .objects .get (
100+ remote_id = github_project .id , provider = Provider .GITHUB .value
101+ )
76102 assert github_project .owner .login == repository .owner
77103 assert github_project .name == repository .name
78104 assert github_project .svn_url == repository .url
79105
80106
81107def test_sync_moved_repo (repository ):
82108 project_list = generate_project_list (repository .remote_id )
109+ gitlab_envs = generate_proj_envs_list ()
83110 with patch (
84111 "gitlab.v4.objects.ProjectManager.list" , return_value = project_list ["gitlab" ]
85112 ), patch (
86113 "github.AuthenticatedUser.AuthenticatedUser.get_repos" ,
87114 return_value = project_list ["github" ],
115+ ), patch (
116+ "zoo.repos.tasks.get_project_enviroments" ,
117+ return_value = gitlab_envs ,
88118 ):
89119 sync_repos ()
90120
@@ -96,6 +126,10 @@ def test_sync_moved_repo(repository):
96126 assert gitlab_project .path == repository .name
97127 assert gitlab_project .web_url == repository .url
98128
129+ repo_env = repository .repository_environments .first ()
130+ assert gitlab_envs [0 ].name == repo_env .name
131+ assert gitlab_envs [0 ].external_url == repo_env .external_url
132+
99133 github_project = project_list ["github" ][0 ]
100134 repository = Repository .objects .get (
101135 remote_id = github_project .id , provider = Provider .GITHUB .value
0 commit comments