summaryrefslogtreecommitdiff
path: root/test/lib/powerdnsex/managers/zones_manager_test.exs
blob: d349ea87139b7cc0c36f09fb664734a3303b228c (plain) (blame)
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
defmodule PowerDNSex.Managers.ZonesManagerTest do

  use ExUnit.Case, async: false
  use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney

  alias PowerDNSex.Managers.ZonesManager
  alias PowerDNSex.Models.{Zone, Record}
  alias PowerDNSex.Models.ResourceRecordSet, as: RRSet
  alias PowerDNSex.FakeConfig, as: Config

  @invalid_not_canonical %Zone{name: "not-canonical-domain.tst"}
  @unknown_name "it-will-never-exist.on.the.art."

  @valid_zone_test %Zone{name: "my-domain.art.",
                         serial: 2_016_060_601,
                         comments: ["Test comment"] }

  @expected_rrset [
    %RRSet{
      name: "my-domain.art.",
      ttl: 3600,
      type: "SOA",
      records: [
        %Record{content: "a.misconfigured.powerdns.server. " <>
                         "hostmaster.my-domain.art. " <>
                         "2016060601 10800 3600 604800 3600",
                disabled: false}
      ]
    }
  ]

  @expected_zone %Zone{name: "my-domain.art.",
                       id: "my-domain.art.",
                       account: "",
                       serial: 2_016_060_601,
                       url: "api/v1/servers/localhost/zones/my-domain.art.",
                       rrsets: @expected_rrset}

  setup do
    Config.set_url
    Config.set_token

    ExVCR.Config.cassette_library_dir("test/support/cassettes",
                                      "test/support/custom_cassettes")
    HTTPoison.start
  end

  describe "ZoneManager.create/2" do
    @tag :zones_manager_create
    test "return given correct parameters" do
      use_cassette "zones_manager/create/success" do
        zone = ZonesManager.create(@valid_zone_test)
        assert zone.__struct__ == PowerDNSex.Models.Zone
        assert zone.name == @valid_zone_test.name
      end
    end

    @tag :zones_manager_create
    test "return error given invalid name" do
      use_cassette "zones_manager/create/invalid_not_canonical" do
        error_msg = "DNS Name 'not-canonical-domain.tst' is not canonical"
        response = ZonesManager.create(@invalid_not_canonical)
        assert response.__struct__ == PowerDNSex.Models.Error
        assert response.error == error_msg
      end
    end
  end

  describe "ZonesManager.show/2" do
    @tag :zones_manager_show
    test "type of return given a correct zone name" do
      use_cassette "zones_manager/show/success" do
        zone = ZonesManager.show(@valid_zone_test.name)
        assert zone.__struct__ == PowerDNSex.Models.Zone
      end
    end

    @tag :zones_manager_show
    test "values in return given a correct zone name" do
      use_cassette "zones_manager/show/success" do
        zone = ZonesManager.show(@valid_zone_test.name)
        assert zone == @expected_zone
      end
    end

    @tag :zones_manager_show
    test "values in return given a unknown zone name" do
      use_cassette "zones_manager/show/not_found" do
        error_msg = "Could not find domain 'it-will-never-exist.on.the.art.'"
        response = ZonesManager.show(@unknown_name)
        assert response.__struct__ == PowerDNSex.Models.Error
        assert response.error == error_msg
      end
    end
  end

  describe "ZonesManager.delete/2" do
    @tag :zones_manager_delete
    test "return given correct params" do
      use_cassette "zones_manager/delete/success" do
        assert ZonesManager.delete(@valid_zone_test.name) == :ok
      end
    end

    @tag :zones_manager_delete
    test "return error when zone don't exists" do
      use_cassette "zones_manager/delete/not_found" do
        response = ZonesManager.delete(@unknown_name)
        assert response.error == "Could not find domain '#{@unknown_name}'"
      end
    end
  end
end