summaryrefslogtreecommitdiff
path: root/test/lib/powerdnsex/managers/zones_manager_test.exs
blob: 9c011e9264cae892a53e64ee6556a8177ba4e1dd (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
114
115
116
117
118
119
120
121
122
123
124
125
126
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}
      ]
    },
    %RRSet{
      name: "my-domain.art.",
      ttl: 3600,
      type: "NS",
      records: [
        %Record{content: "ns1.domain.com",
                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.",
                       nameservers: ["ns1.domain.com"],
                       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
        {:ok, 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"
        {:error, error} = ZonesManager.create(@invalid_not_canonical)

        assert error.__struct__ == PowerDNSex.Models.Error
        assert error.http_status_code == 422
        assert error.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
        {:ok, zone} = ZonesManager.show(@valid_zone_test.name)
        assert zone.__struct__ == PowerDNSex.Models.Zone
        assert zone.nameservers == ["ns1.domain.com"]
      end
    end

    @tag :zones_manager_show
    test "values in return given a correct zone name" do
      use_cassette "zones_manager/show/success" do
        {:ok, 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.'"
        {:error, error} = ZonesManager.show(@unknown_name)
        assert error.__struct__ == PowerDNSex.Models.Error
        assert error.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
        {:error, error} = ZonesManager.delete(@unknown_name)
        assert error.error == "Could not find domain '#{@unknown_name}'"
      end
    end
  end
end