1+ import unittest
2+ from unittest .mock import patch , Mock
3+ import sys
4+ import os
5+ import tempfile
6+ import json
7+ sys .path .insert (0 , os .path .dirname (os .path .abspath (__file__ )))
8+ from manage_bitbucket_env import export_variables , export_all_variables , export_secure_keys , import_variables
9+
10+ class TestExportImport (unittest .TestCase ):
11+ def setUp (self ):
12+ self .logger = Mock ()
13+ self .auth = Mock ()
14+ self .workspace = 'ws'
15+ self .repo_slug = 'repo'
16+ self .deployment_name = 'env'
17+ self .env_uuid = 'uuid-123'
18+
19+ @patch ('manage_bitbucket_env.get_environment_uuid' )
20+ @patch ('manage_bitbucket_env.get_variables' )
21+ def test_export_variables (self , mock_get_vars , mock_get_uuid ):
22+ mock_get_uuid .return_value = self .env_uuid
23+ mock_get_vars .return_value = [
24+ {"key" : "A" , "value" : "1" , "secured" : False },
25+ {"key" : "B" , "value" : "2" , "secured" : True }
26+ ]
27+ with tempfile .NamedTemporaryFile (delete = False ) as tf :
28+ fname = tf .name
29+ try :
30+ export_variables (self .workspace , self .repo_slug , self .deployment_name , fname , self .auth , self .logger )
31+ with open (fname ) as f :
32+ data = json .load (f )
33+ self .assertEqual (len (data ), 1 )
34+ self .assertEqual (data [0 ]["key" ], "A" )
35+ finally :
36+ os .unlink (fname )
37+
38+ @patch ('manage_bitbucket_env.get_environment_uuid' )
39+ @patch ('manage_bitbucket_env.get_variables' )
40+ def test_export_all_variables (self , mock_get_vars , mock_get_uuid ):
41+ mock_get_uuid .return_value = self .env_uuid
42+ mock_get_vars .return_value = [
43+ {"key" : "A" , "value" : "1" , "secured" : False },
44+ {"key" : "B" , "value" : "2" , "secured" : True }
45+ ]
46+ with tempfile .NamedTemporaryFile (delete = False ) as tf :
47+ fname = tf .name
48+ try :
49+ export_all_variables (self .workspace , self .repo_slug , self .deployment_name , fname , self .auth , self .logger )
50+ with open (fname ) as f :
51+ data = json .load (f )
52+ self .assertEqual (len (data ), 2 )
53+ test_var = next (v for v in data if v ["key" ] == "A" )
54+ self .assertEqual (test_var ["value" ], "1" )
55+ self .assertFalse (test_var ["secured" ])
56+ secure_var = next (v for v in data if v ["key" ] == "B" )
57+ self .assertEqual (secure_var ["value" ], "" )
58+ self .assertTrue (secure_var ["secured" ])
59+ finally :
60+ os .unlink (fname )
61+
62+ @patch ('manage_bitbucket_env.get_environment_uuid' )
63+ @patch ('manage_bitbucket_env.get_variables' )
64+ def test_export_secure_keys (self , mock_get_vars , mock_get_uuid ):
65+ mock_get_uuid .return_value = self .env_uuid
66+ mock_get_vars .return_value = [
67+ {"key" : "A" , "secured" : False },
68+ {"key" : "B" , "secured" : True },
69+ {"key" : "C" , "secured" : True }
70+ ]
71+ with tempfile .NamedTemporaryFile (delete = False ) as tf :
72+ fname = tf .name
73+ try :
74+ export_secure_keys (self .workspace , self .repo_slug , self .deployment_name , fname , self .auth , self .logger )
75+ with open (fname ) as f :
76+ data = json .load (f )
77+ self .assertIn ("B" , data )
78+ self .assertIn ("C" , data )
79+ self .assertNotIn ("A" , data )
80+ finally :
81+ os .unlink (fname )
82+
83+ @patch ('manage_bitbucket_env.get_environment_uuid' )
84+ @patch ('manage_bitbucket_env.get_variables' )
85+ @patch ('manage_bitbucket_env.update_vars' )
86+ def test_import_variables (self , mock_update , mock_get_vars , mock_get_uuid ):
87+ mock_get_uuid .return_value = self .env_uuid
88+ mock_get_vars .return_value = []
89+ test_vars = [
90+ {"key" : "A" , "value" : "1" , "secured" : False },
91+ {"key" : "B" , "value" : "2" , "secured" : True }
92+ ]
93+ with tempfile .NamedTemporaryFile (delete = False , mode = 'w' ) as tf :
94+ json .dump (test_vars , tf )
95+ fname = tf .name
96+ try :
97+ import_variables (self .workspace , self .repo_slug , self .deployment_name , fname , False , self .auth , self .logger )
98+ self .assertEqual (mock_update .call_count , 1 )
99+ call_args = mock_update .call_args [1 ]
100+ self .assertEqual (call_args ['var' ]["key" ], "A" )
101+ finally :
102+ os .unlink (fname )
103+
104+ if __name__ == '__main__' :
105+ unittest .main ()
0 commit comments