1 # Copyright 2021 Canonical Ltd.
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
16 from click
.testing
import CliRunner
19 from unittest
.mock
import Mock
, patch
22 from osmclient
.cli_commands
import vca
25 @patch("builtins.print")
26 @patch("osmclient.cli_commands.vca.PrettyTable")
27 @patch("osmclient.scripts.osm.client.Client")
28 @patch("osmclient.cli_commands.utils.check_client_version")
29 @patch("osmclient.cli_commands.vca.utils.get_project")
30 class TestVca(unittest
.TestCase
):
32 self
.runner
= CliRunner()
39 "detailed-status": "status",
40 "operationalState": "state",
47 mock_check_client_version
,
52 mock_client
.return_value
= self
.ctx_obj
53 mock_pretty_table
.return_value
= self
.table
54 mock_get_project
.return_value
= ("5678", "project")
55 self
.ctx_obj
.vca
.list.return_value
= [self
.vca_data
]
59 args
=["--filter", "somefilter"],
61 mock_check_client_version
.assert_called()
62 self
.ctx_obj
.vca
.list.assert_called_with("somefilter")
63 mock_pretty_table
.assert_called_with(["Name", "Id", "Operational State"])
64 self
.table
.add_row
.assert_called_with(["name", "1234", "state"])
65 mock_print
.assert_called_with(self
.table
)
67 def test_vca_list_long(
70 mock_check_client_version
,
75 mock_client
.return_value
= self
.ctx_obj
76 mock_pretty_table
.return_value
= self
.table
77 mock_get_project
.return_value
= ("5678", "project")
78 self
.ctx_obj
.vca
.list.return_value
= [self
.vca_data
]
82 args
=["--filter", "somefilter", "--long"],
84 mock_check_client_version
.assert_called()
85 self
.ctx_obj
.vca
.list.assert_called_with("somefilter")
86 mock_pretty_table
.assert_called_with(
87 ["Name", "Id", "Project", "Operational State", "Detailed Status"]
89 self
.table
.add_row
.assert_called_with(
90 ["name", "1234", "project", "state", "status"]
92 mock_print
.assert_called_with(self
.table
)
94 def test_vca_list_literal(
97 mock_check_client_version
,
102 mock_client
.return_value
= self
.ctx_obj
103 self
.ctx_obj
.vca
.list.return_value
= [self
.vca_data
]
109 mock_check_client_version
.assert_called()
110 self
.ctx_obj
.vca
.list.assert_called()
111 mock_pretty_table
.assert_not_called()
112 self
.table
.add_row
.assert_not_called()
113 mock_print
.assert_called_with(
114 yaml
.safe_dump([self
.vca_data
], indent
=4, default_flow_style
=False)
120 mock_check_client_version
,
125 mock_client
.return_value
= self
.ctx_obj
126 mock_pretty_table
.return_value
= self
.table
127 self
.ctx_obj
.vca
.get
.return_value
= self
.vca_data
133 self
.ctx_obj
.vca
.get
.assert_called_with("name")
134 mock_pretty_table
.assert_called_with(["key", "attribute"])
135 self
.assertEqual(self
.table
.add_row
.call_count
, len(self
.vca_data
))
136 mock_print
.assert_called_with(self
.table
)
138 def test_vca_show_literal(
141 mock_check_client_version
,
146 mock_client
.return_value
= self
.ctx_obj
147 self
.ctx_obj
.vca
.get
.return_value
= self
.vca_data
151 args
=["name", "--literal"],
153 self
.ctx_obj
.vca
.get
.assert_called_with("name")
154 mock_pretty_table
.assert_not_called()
155 self
.table
.add_row
.assert_not_called()
156 mock_print
.assert_called_with(
157 yaml
.safe_dump(self
.vca_data
, indent
=4, default_flow_style
=False)
163 mock_check_client_version
,
168 mock_client
.return_value
= self
.ctx_obj
174 mock_check_client_version
.assert_called()
175 self
.ctx_obj
.vca
.update
.assert_called_with("name", {"name": "name"})
176 mock_pretty_table
.assert_not_called()
177 self
.table
.add_row
.assert_not_called()
178 mock_print
.assert_not_called()
180 def test_vca_update_with_args(
183 mock_check_client_version
,
188 mock_client
.return_value
= self
.ctx_obj
213 json
.dumps({"juju-https-proxy": "http://squid:3128"}),
216 mock_check_client_version
.assert_called()
217 self
.ctx_obj
.vca
.update
.assert_called_with(
221 "endpoints": ["1.2.3.4:17070"],
225 "lxd-cloud": "lxd_cloud",
226 "lxd-credentials": "lxd_credentials",
227 "k8s-cloud": "k8s_cloud",
228 "k8s-credentials": "k8s_credentials",
229 "description": "description",
230 "model-config": {"juju-https-proxy": "http://squid:3128"},
233 mock_pretty_table
.assert_not_called()
234 self
.table
.add_row
.assert_not_called()
235 mock_print
.assert_not_called()
240 mock_check_client_version
,
245 mock_client
.return_value
= self
.ctx_obj
270 json
.dumps({"juju-https-proxy": "http://squid:3128"}),
273 mock_check_client_version
.assert_called()
274 self
.ctx_obj
.vca
.create
.assert_called_with(
278 "endpoints": ["1.2.3.4:17070"],
282 "lxd-cloud": "lxd_cloud",
283 "lxd-credentials": "lxd_credentials",
284 "k8s-cloud": "k8s_cloud",
285 "k8s-credentials": "k8s_credentials",
286 "description": "description",
287 "model-config": {"juju-https-proxy": "http://squid:3128"},
290 mock_pretty_table
.assert_not_called()
291 self
.table
.add_row
.assert_not_called()
292 mock_print
.assert_not_called()
297 mock_check_client_version
,
302 mock_client
.return_value
= self
.ctx_obj
308 mock_check_client_version
.assert_called()
309 self
.ctx_obj
.vca
.delete
.assert_called_with("name", force
=False)
310 mock_pretty_table
.assert_not_called()
311 self
.table
.add_row
.assert_not_called()
312 mock_print
.assert_not_called()
317 mock_check_client_version
,
322 data
= vca
.load(json
.dumps({"juju-https-proxy": "http://squid:3128"}))
323 self
.assertEqual(data
, {"juju-https-proxy": "http://squid:3128"})