-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_gbucket.py
99 lines (81 loc) · 2.93 KB
/
test_gbucket.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# -*- coding: utf-8 -*-
# Copyright © 2022-present Worldr Technologies Limited. All Rights Reserved.
"""gBucket tests."""
from pathlib import Path, PosixPath
from typing import Optional
from unittest.mock import Mock, patch
import pytest
from google.cloud.exceptions import NotFound
from setupr.gbucket import InstallationData, InstallationDataError
def test_implicit_data() -> None:
sut = InstallationData(PosixPath("EldenRing"))
assert sut.bucket_name == "worldr-customer-EldenRing"
assert sut.blob_name == "./EldenRing-values.yaml"
@pytest.fixture()
def sut() -> InstallationData:
"""Fixture: We provide a simple sample service account file."""
with patch("pathlib.Path.glob") as mock_glob:
mock_glob.return_value = [Path("xUnit-test.sa.json")]
return InstallationData()
def test_derived_data(sut: InstallationData) -> None:
"""Test derived data."""
assert sut.bucket_name == "worldr-customer-xUnit-test"
assert sut.blob_name == "./xUnit-test-values.yaml"
@pytest.mark.parametrize(
("items"),
[
(Path("xUnit-test.sa.json"), Path("xUnit-test.sa.json")),
([]),
],
)
def test_error_sa_files(items: InstallationData) -> None:
with patch("pathlib.Path.glob") as mock_glob:
mock_glob.return_value = items
with pytest.raises(InstallationDataError):
InstallationData()
@pytest.mark.parametrize(
("error", "expected"),
[
(None, True),
(NotFound("Not found"), False),
],
)
def test_get(
error: Optional[NotFound], expected: bool, sut: InstallationData
) -> None:
"""Test get."""
with patch(
"setupr.gbucket.storage.Client.from_service_account_json"
) as m_from_service_account_json:
m_blob = Mock()
m_blob.download_to_filename = Mock(side_effect=error)
m_bucket = Mock()
m_bucket.blob.return_value = m_blob
m_storage_client = Mock()
m_storage_client.bucket.return_value = m_bucket
m_from_service_account_json.return_value = m_storage_client
assert sut.get() is expected
m_blob.download_to_filename.assert_called_once_with(
"./xUnit-test-values.yaml"
)
m_bucket.blob.assert_called_once_with("xUnit-test-values.yaml")
m_storage_client.bucket.assert_called_once_with(
"worldr-customer-xUnit-test"
)
m_from_service_account_json.assert_called_once_with(
PosixPath("xUnit-test.sa.json")
)
@pytest.mark.parametrize(
("rget", "expected"),
[
(True, True),
(False, False),
],
)
def test_fetch(rget: bool, expected: bool, sut: InstallationData) -> None:
sut.get = Mock(return_value=rget) # type: ignore
assert sut.fetch() is expected
def test_sa_is_path() -> None:
sut = InstallationData(PosixPath("tests/EldenRing.sa.json"))
assert sut.bucket_name == "worldr-customer-EldenRing"
assert sut.blob_name == "tests/EldenRing-values.yaml"