|
| 1 | +from __future__ import unicode_literals |
| 2 | +from __future__ import print_function |
| 3 | +from __future__ import division |
| 4 | +from __future__ import absolute_import |
| 5 | +from builtins import list, object, str |
| 6 | +from future import standard_library |
| 7 | +standard_library.install_aliases() |
| 8 | + |
| 9 | +from upcloud_api import FirewallRule, Tag |
| 10 | + |
| 11 | +from conftest import Mock |
| 12 | +import json, pytest, responses |
| 13 | + |
| 14 | + |
| 15 | +def tag_post_callback(request): |
| 16 | + print(request.body) |
| 17 | + request_body = json.loads(request.body) |
| 18 | + |
| 19 | + if "name" not in request_body["tag"]: |
| 20 | + raise Exception("required field missing") |
| 21 | + |
| 22 | + if "servers" in request_body["tag"]: |
| 23 | + assert isinstance(request_body["tag"]["servers"], dict) |
| 24 | + assert isinstance(request_body["tag"]["servers"]["server"], list) |
| 25 | + assert isinstance(request_body["tag"]["servers"]["server"][0], str) |
| 26 | + |
| 27 | + if "description" in request_body["tag"]: |
| 28 | + assert isinstance(request_body["tag"]["description"], str) |
| 29 | + |
| 30 | + return(201, {}, json.dumps(request_body)) |
| 31 | + |
| 32 | + |
| 33 | +class TestTags(object): |
| 34 | + |
| 35 | + @responses.activate |
| 36 | + def test_get_tag(self, manager): |
| 37 | + Mock.mock_get("tag/TheTestTag") |
| 38 | + tag = manager.get_tag("TheTestTag") |
| 39 | + |
| 40 | + assert tag.name == "TheTestTag" |
| 41 | + assert tag.description == "Description of TheTestTag" |
| 42 | + assert len(tag.servers) == 2 |
| 43 | + assert tag.servers[0].uuid == "0057e20a-6878-43a7-b2b3-530c4a4bdc55" |
| 44 | + |
| 45 | + @responses.activate |
| 46 | + def test_get_tags(self, manager): |
| 47 | + Mock.mock_get("tag") |
| 48 | + tags = manager.get_tags() |
| 49 | + |
| 50 | + assert len(tags) == 2 |
| 51 | + assert tags[0].name == "TheTestTag1" |
| 52 | + assert tags[1].name == "TheTestTag2" |
| 53 | + assert tags[0].servers[0].uuid == "0057e20a-6878-43a7-b2b3-530c4a4bdc55" |
| 54 | + |
| 55 | + @responses.activate |
| 56 | + def test_create_new_tag(self, manager): |
| 57 | + |
| 58 | + for i in range(1,4): |
| 59 | + responses.add_callback( |
| 60 | + responses.POST, |
| 61 | + Mock.base_url + "/tag", |
| 62 | + content_type="application/json", |
| 63 | + callback=tag_post_callback |
| 64 | + ) |
| 65 | + |
| 66 | + tag1 = manager.create_tag("Tag1") |
| 67 | + tag2 = manager.create_tag("Tag2", "a nice tag") |
| 68 | + tag3 = manager.create_tag("Tag3", "a nicer tag", ["00798b85-efdc-41ca-8021-f6ef457b8531"]) |
| 69 | + |
| 70 | + assert tag1.name == "Tag1" |
| 71 | + assert tag2.name == "Tag2" |
| 72 | + assert tag3.name == "Tag3" |
| 73 | + assert isinstance(tag3.servers, list) |
| 74 | + assert tag3.servers[0].uuid == "00798b85-efdc-41ca-8021-f6ef457b8531" |
| 75 | + |
| 76 | + @responses.activate |
| 77 | + def test_edit_tag(self, manager): |
| 78 | + |
| 79 | + Mock.mock_get("tag/TheTestTag") |
| 80 | + tag = manager.get_tag("TheTestTag") |
| 81 | + |
| 82 | + responses.add_callback( |
| 83 | + responses.PUT, |
| 84 | + Mock.base_url + "/tag/TheTestTag", |
| 85 | + content_type="application/json", |
| 86 | + callback=tag_post_callback |
| 87 | + ) |
| 88 | + |
| 89 | + tag.name = 'AnotherTestTag' |
| 90 | + assert tag._api_name == 'TheTestTag' |
| 91 | + |
| 92 | + tag.save() |
| 93 | + |
| 94 | + assert tag.name == 'AnotherTestTag' |
| 95 | + assert tag._api_name == 'AnotherTestTag' |
| 96 | + |
| 97 | + @responses.activate |
| 98 | + def test_assign_tags_to_server(self, manager): |
| 99 | + data = Mock.mock_get("server/00798b85-efdc-41ca-8021-f6ef457b8531") |
| 100 | + server = manager.get_server("00798b85-efdc-41ca-8021-f6ef457b8531") |
| 101 | + |
| 102 | + responses.add( |
| 103 | + responses.POST, |
| 104 | + Mock.base_url + "/server/00798b85-efdc-41ca-8021-f6ef457b8531/tag/tag1,tag2", |
| 105 | + body = json.dumps({ 'foo': 'bar' }), |
| 106 | + content_type="application/json", |
| 107 | + status=200 |
| 108 | + ) |
| 109 | + server.add_tags(["tag1", Tag("tag2")]) |
| 110 | + |
| 111 | + for tag in ["web1", "tag1", "tag2"]: |
| 112 | + assert tag in server.tags |
| 113 | + |
| 114 | + @responses.activate |
| 115 | + def test_remove_tags_from_server(self, manager): |
| 116 | + data = Mock.mock_get("server/00798b85-efdc-41ca-8021-f6ef457b8531") |
| 117 | + server = manager.get_server("00798b85-efdc-41ca-8021-f6ef457b8531") |
| 118 | + |
| 119 | + responses.add( |
| 120 | + responses.POST, |
| 121 | + Mock.base_url + "/server/00798b85-efdc-41ca-8021-f6ef457b8531/untag/tag1,tag2", |
| 122 | + body = json.dumps({ 'foo': 'bar' }), |
| 123 | + content_type="application/json", |
| 124 | + status=200 |
| 125 | + ) |
| 126 | + server.remove_tags(["tag1", Tag("tag2")]) |
| 127 | + |
| 128 | + for tag in ["tag1", "tag2"]: |
| 129 | + assert tag not in server.tags |
| 130 | + assert "web1" in server.tags |
| 131 | + |
0 commit comments