summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodrigo Coutinho <digao@osfeio.com>2017-12-29 18:32:36 -0200
committerGitHub <noreply@github.com>2017-12-29 18:32:36 -0200
commitf75b83f1713a7c7aacfcdd8a4134a9113981d136 (patch)
tree6e4ca433c2665b002f0c885dde82bdab16556429
parentbump version (diff)
Fix test suite (#11)
* Fix broken specs and update exvcr * Provide default configuration to run tests * Show nameservers in zone
-rw-r--r--config/config.exs28
-rw-r--r--config/dev.exs1
-rw-r--r--config/prod.exs1
-rw-r--r--config/test.exs4
-rw-r--r--lib/powerdnsex/managers/records_manager.ex12
-rw-r--r--lib/powerdnsex/managers/zones_manager.ex5
-rw-r--r--lib/powerdnsex/models/resource_record_set.ex8
-rw-r--r--mix.exs4
-rw-r--r--mix.lock27
-rw-r--r--test/lib/powerdnsex/config_test.exs28
-rw-r--r--test/lib/powerdnsex/managers/records_manager_test.exs53
-rw-r--r--test/lib/powerdnsex/managers/zones_manager_test.exs37
-rw-r--r--test/lib/powerdnsex/models/resource_record_set_test.exs89
-rw-r--r--test/support/cassettes/zones_manager/show/success.json2
-rw-r--r--test/support/fake_config.exs4
15 files changed, 190 insertions, 113 deletions
diff --git a/config/config.exs b/config/config.exs
index 4f2b23f..8eff0b9 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -1,30 +1,4 @@
-# This file is responsible for configuring your application
-# and its dependencies with the aid of the Mix.Config module.
use Mix.Config
-# This configuration is loaded before any dependency and is restricted
-# to this project. If another project depends on this project, this
-# file won't be loaded nor affect the parent project. For this reason,
-# if you want to provide default values for your application for
-# 3rd-party users, it should be done in your "mix.exs" file.
+import_config "#{Mix.env}.exs"
-# You can configure for your application as:
-#
-# config :powerdnsex, key: :value
-#
-# And access this configuration in your application as:
-#
-# Application.get_env(:powerdnsex, :key)
-#
-# Or configure a 3rd-party app:
-#
-# config :logger, level: :info
-#
-
-# It is also possible to import configuration files, relative to this
-# directory. For example, you can emulate configuration per environment
-# by uncommenting the line below and defining dev.exs, test.exs and such.
-# Configuration from the imported file will override the ones defined
-# here (which is why it is important to import them last).
-#
-# import_config "#{Mix.env}.exs"
diff --git a/config/dev.exs b/config/dev.exs
new file mode 100644
index 0000000..d2d855e
--- /dev/null
+++ b/config/dev.exs
@@ -0,0 +1 @@
+use Mix.Config
diff --git a/config/prod.exs b/config/prod.exs
new file mode 100644
index 0000000..d2d855e
--- /dev/null
+++ b/config/prod.exs
@@ -0,0 +1 @@
+use Mix.Config
diff --git a/config/test.exs b/config/test.exs
new file mode 100644
index 0000000..eedc0c7
--- /dev/null
+++ b/config/test.exs
@@ -0,0 +1,4 @@
+use Mix.Config
+
+config :powerdnsex, url: "https://powerdns.example.com"
+config :powerdnsex, token: "example"
diff --git a/lib/powerdnsex/managers/records_manager.ex b/lib/powerdnsex/managers/records_manager.ex
index c5dd051..9b6a96f 100644
--- a/lib/powerdnsex/managers/records_manager.ex
+++ b/lib/powerdnsex/managers/records_manager.ex
@@ -2,7 +2,7 @@ defmodule PowerDNSex.Managers.RecordsManager do
require Logger
alias PowerDNSex.HttpClient
- alias PowerDNSex.Models.{Zone, Record, Error}
+ alias PowerDNSex.Models.{Zone, Error}
alias PowerDNSex.Models.ResourceRecordSet, as: RRSet
alias PowerDNSex.Managers.ZonesManager
alias HTTPoison.Response
@@ -29,7 +29,7 @@ defmodule PowerDNSex.Managers.RecordsManager do
updated_rrset = Map.merge(updated_rrset, %{changetype: "REPLACE"})
patch(zone, updated_rrset)
else
- error_msg = "Record #{rrset_name}, type #{rrset_type}, not found!"
+ error_msg = "Record #{rrset_find_params.name}, type #{rrset_type}, not found!"
{:error, %Error{error: error_msg, http_status_code: 404}}
end
end
@@ -41,7 +41,7 @@ defmodule PowerDNSex.Managers.RecordsManager do
###
# Private
- ##
+ ###
defp process_request_response(%Response{body: body, status_code: status}) do
case status do
@@ -70,10 +70,4 @@ defmodule PowerDNSex.Managers.RecordsManager do
defp patch(%Zone{} = zone, %{} = rrset_attrs) do
patch(zone, RRSet.build(rrset_attrs))
end
-
- defp has_attrs?(rrset, attrs) do
- attrs
- |> Map.keys
- |> Enum.all?(&(equal_attr?(&1, attrs[&1], rrsets)))
- end
end
diff --git a/lib/powerdnsex/managers/zones_manager.ex b/lib/powerdnsex/managers/zones_manager.ex
index 0430223..c7ec1ab 100644
--- a/lib/powerdnsex/managers/zones_manager.ex
+++ b/lib/powerdnsex/managers/zones_manager.ex
@@ -56,8 +56,11 @@ defmodule PowerDNSex.Managers.ZonesManager do
end
defp decode_body(body) do
- body
+ zone = body
|> Poison.decode!(as: %Zone{rrsets:
[%ResourceRecordSet{records: [%Record{}]}]})
+
+ nameservers = ResourceRecordSet.nameservers(zone.rrsets)
+ Map.put(zone, :nameservers, nameservers)
end
end
diff --git a/lib/powerdnsex/models/resource_record_set.ex b/lib/powerdnsex/models/resource_record_set.ex
index c0845d9..1a410b1 100644
--- a/lib/powerdnsex/models/resource_record_set.ex
+++ b/lib/powerdnsex/models/resource_record_set.ex
@@ -47,6 +47,14 @@ defmodule PowerDNSex.Models.ResourceRecordSet do
end)
end
+ def nameservers(rrsets) do
+ rrset = Enum.find(rrsets, fn(rrset) -> rrset.type == "NS" end)
+ nameservers = case rrset do
+ nil -> []
+ _ -> Enum.map(rrset.records, &(&1.content) )
+ end
+ end
+
###
# Private
###
diff --git a/mix.exs b/mix.exs
index 6fd5396..b102ccd 100644
--- a/mix.exs
+++ b/mix.exs
@@ -17,9 +17,9 @@ defmodule PowerDNSex.Mixfile do
end
defp deps do
- [{:httpoison, "~> 0.9.0"},
+ [{:httpoison, "~> 0.13.0"},
{:poison, "~> 2.2"},
- {:exvcr, "~> 0.8.0", only: :test}]
+ {:exvcr, "~> 0.9.1", only: :test}]
end
defp description do
diff --git a/mix.lock b/mix.lock
index 328bf04..4d9c60a 100644
--- a/mix.lock
+++ b/mix.lock
@@ -1,13 +1,14 @@
-%{"certifi": {:hex, :certifi, "0.4.0", "a7966efb868b179023618d29a407548f70c52466bf1849b9e8ebd0e34b7ea11f", [:rebar3], []},
- "exactor": {:hex, :exactor, "2.2.0", "2a7418b82d974fe8276edd62c1facf4a9dc06339cdf11b5dcd10359e107fe5c3", [:mix], []},
- "exjsx": {:hex, :exjsx, "3.2.0", "7136cc739ace295fc74c378f33699e5145bead4fdc1b4799822d0287489136fb", [:mix], [{:jsx, "~> 2.6.2", [hex: :jsx, optional: false]}]},
- "exvcr": {:hex, :exvcr, "0.8.0", "61b8da4723150938f612af8a2f885709af7e486e4deac4b454a161de3430e699", [:mix], [{:exactor, "~> 2.2", [hex: :exactor, optional: false]}, {:exjsx, "~> 3.2", [hex: :exjsx, optional: false]}, {:httpoison, "~> 0.8", [hex: :httpoison, optional: true]}, {:httpotion, "~> 3.0", [hex: :httpotion, optional: true]}, {:ibrowse, "~> 4.2.2", [hex: :ibrowse, optional: true]}, {:meck, "~> 0.8.3", [hex: :meck, optional: false]}]},
- "hackney": {:hex, :hackney, "1.6.0", "8d1e9440c9edf23bf5e5e2fe0c71de03eb265103b72901337394c840eec679ac", [:rebar3], [{:certifi, "0.4.0", [hex: :certifi, optional: false]}, {:idna, "1.2.0", [hex: :idna, optional: false]}, {:metrics, "1.0.1", [hex: :metrics, optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, optional: false]}, {:ssl_verify_fun, "1.1.0", [hex: :ssl_verify_fun, optional: false]}]},
- "httpoison": {:hex, :httpoison, "0.9.0", "68187a2daddfabbe7ca8f7d75ef227f89f0e1507f7eecb67e4536b3c516faddb", [:mix], [{:hackney, "~> 1.6.0", [hex: :hackney, optional: false]}]},
- "idna": {:hex, :idna, "1.2.0", "ac62ee99da068f43c50dc69acf700e03a62a348360126260e87f2b54eced86b2", [:rebar3], []},
- "jsx": {:hex, :jsx, "2.6.2", "213721e058da0587a4bce3cc8a00ff6684ced229c8f9223245c6ff2c88fbaa5a", [:mix, :rebar], []},
- "meck": {:hex, :meck, "0.8.4", "59ca1cd971372aa223138efcf9b29475bde299e1953046a0c727184790ab1520", [:rebar, :make], []},
- "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], []},
- "mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], []},
- "poison": {:hex, :poison, "2.2.0", "4763b69a8a77bd77d26f477d196428b741261a761257ff1cf92753a0d4d24a63", [:mix], []},
- "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.0", "edee20847c42e379bf91261db474ffbe373f8acb56e9079acb6038d4e0bf414f", [:rebar, :make], []}}
+%{"certifi": {:hex, :certifi, "2.0.0", "a0c0e475107135f76b8c1d5bc7efb33cd3815cb3cf3dea7aefdd174dabead064", [:rebar3], [], "hexpm"},
+ "exactor": {:hex, :exactor, "2.2.4", "5efb4ddeb2c48d9a1d7c9b465a6fffdd82300eb9618ece5d34c3334d5d7245b1", [:mix], [], "hexpm"},
+ "exjsx": {:hex, :exjsx, "4.0.0", "60548841e0212df401e38e63c0078ec57b33e7ea49b032c796ccad8cde794b5c", [:mix], [{:jsx, "~> 2.8.0", [hex: :jsx, repo: "hexpm", optional: false]}], "hexpm"},
+ "exvcr": {:hex, :exvcr, "0.9.1", "31e3936a790a14bf56b31b6b276577076a5ef8afd9b2d53ba3ff8bb647d45613", [:mix], [{:exactor, "~> 2.2", [hex: :exactor, repo: "hexpm", optional: false]}, {:exjsx, "~> 4.0", [hex: :exjsx, repo: "hexpm", optional: false]}, {:httpoison, "~> 0.13", [hex: :httpoison, repo: "hexpm", optional: true]}, {:httpotion, "~> 3.0", [hex: :httpotion, repo: "hexpm", optional: true]}, {:ibrowse, "~> 4.4", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:meck, "~> 0.8.8", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm"},
+ "hackney": {:hex, :hackney, "1.10.1", "c38d0ca52ea80254936a32c45bb7eb414e7a96a521b4ce76d00a69753b157f21", [:rebar3], [{:certifi, "2.0.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "5.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"},
+ "httpoison": {:hex, :httpoison, "0.13.0", "bfaf44d9f133a6599886720f3937a7699466d23bb0cd7a88b6ba011f53c6f562", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"},
+ "idna": {:hex, :idna, "5.1.0", "d72b4effeb324ad5da3cab1767cb16b17939004e789d8c0ad5b70f3cea20c89a", [:rebar3], [{:unicode_util_compat, "0.3.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"},
+ "jsx": {:hex, :jsx, "2.8.3", "a05252d381885240744d955fbe3cf810504eb2567164824e19303ea59eef62cf", [:mix, :rebar3], [], "hexpm"},
+ "meck": {:hex, :meck, "0.8.9", "64c5c0bd8bcca3a180b44196265c8ed7594e16bcc845d0698ec6b4e577f48188", [:rebar3], [], "hexpm"},
+ "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"},
+ "mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], [], "hexpm"},
+ "poison": {:hex, :poison, "2.2.0", "4763b69a8a77bd77d26f477d196428b741261a761257ff1cf92753a0d4d24a63", [:mix], [], "hexpm"},
+ "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm"},
+ "unicode_util_compat": {:hex, :unicode_util_compat, "0.3.1", "a1f612a7b512638634a603c8f401892afbf99b8ce93a45041f8aaca99cadb85e", [:rebar3], [], "hexpm"}}
diff --git a/test/lib/powerdnsex/config_test.exs b/test/lib/powerdnsex/config_test.exs
index c0a5150..079b127 100644
--- a/test/lib/powerdnsex/config_test.exs
+++ b/test/lib/powerdnsex/config_test.exs
@@ -4,27 +4,27 @@ defmodule PowerDNSex.ConfigTest do
alias PowerDNSex.FakeConfig, as: Config
- setup with_valid_url, do: Config.set_url
- setup with_valid_token, do: Config.set_token
- setup with_valid_token_and_url, do: Config.set_url && Config.set_token
+ setup do: Config.set_url
+ setup do: Config.set_token
+ setup do: Config.set_url && Config.set_token
describe "Config.powerdns_token/0" do
@tag :configs
- test "Using Env vars", with_valid_url do
- env_token = "S3cr37_70k3n"
+ test "Using Env vars" do
+ env_token = "new-token"
System.put_env("POWERDNS_TOKEN", env_token)
- Application.put_env(:powerdns, :token, {:system, "POWERDNS_TOKEN"})
+ Application.put_env(:powerdnsex, :token, {:system, "POWERDNS_TOKEN"})
assert PowerDNSex.Config.powerdns_token == env_token
end
@tag :configs
- test "using application config", with_valid_token_and_url do
+ test "using application config" do
assert PowerDNSex.Config.powerdns_token == Config.token
end
@tag :configs
- test "given none token config", with_valid_url do
- Application.delete_env(:powerdns, :token)
+ test "given none token config" do
+ Application.delete_env(:powerdnsex, :token)
expected_error = "[PowerDNSex] PowerDNS token not configured."
assert_raise RuntimeError, expected_error, fn ->
@@ -35,21 +35,21 @@ defmodule PowerDNSex.ConfigTest do
describe "Config.powerdns_url/0" do
@tag :configs
- test "Using Env vars", with_valid_token do
+ test "Using Env vars" do
env_url = "https://env-powerdns.test/"
System.put_env("POWERDNS_URL", env_url)
- Application.put_env(:powerdns, :url, {:system, "POWERDNS_URL"})
+ Application.put_env(:powerdnsex, :url, {:system, "POWERDNS_URL"})
assert PowerDNSex.Config.powerdns_url == env_url
end
@tag :configs
- test "using application config", with_valid_token_and_url do
+ test "using application config" do
assert PowerDNSex.Config.powerdns_url == Config.url <> "/"
end
@tag :configs
- test "given none url config", with_valid_token do
- Application.delete_env(:powerdns, :url)
+ test "given none url config" do
+ Application.delete_env(:powerdnsex, :url)
expected_error = "[PowerDNSex] PowerDNS url not configured."
assert_raise RuntimeError, expected_error, fn ->
PowerDNSex.Config.powerdns_url
diff --git a/test/lib/powerdnsex/managers/records_manager_test.exs b/test/lib/powerdnsex/managers/records_manager_test.exs
index 6580bd3..4c83b40 100644
--- a/test/lib/powerdnsex/managers/records_manager_test.exs
+++ b/test/lib/powerdnsex/managers/records_manager_test.exs
@@ -6,9 +6,21 @@ defmodule PowerDNSex.Managers.RecordsManagerTest do
alias PowerDNSex.Models.{Zone, Record}
alias PowerDNSex.Managers.RecordsManager
alias PowerDNSex.FakeConfig, as: Config
+ alias PowerDNSex.Models.ResourceRecordSet, as: RRSet
+
+ @record %RRSet{
+ name: "updated-record.my-domain.art.",
+ type: "A",
+ ttl: 3600,
+ records: [{"127.0.0.1", false}]
+ }
+
+ @valid_zone %Zone{
+ name: "my-domain.art.",
+ url: "api/v1/servers/localhost/zones/my-domain.art.",
+ rrsets: [@record]
+ }
- @valid_zone %Zone{name: "my-domain.art.",
- url: "api/v1/servers/localhost/zones/my-domain.art."}
@new_record %{
name: "new-record.my-domain.art.",
type: "A",
@@ -29,13 +41,7 @@ defmodule PowerDNSex.Managers.RecordsManagerTest do
@record_to_delete %{
name: "record-to-delete.my-domain.art.",
type: "A",
- }
-
- @invalid_record %{
- name: "updated-record.my-domain.art.",
- type: "NS",
- ttl: 86_800,
- records: [{"127.0.0.1", true}]
+ records: []
}
@invalid_zone %Zone{
@@ -48,7 +54,7 @@ defmodule PowerDNSex.Managers.RecordsManagerTest do
Config.set_token
ExVCR.Config.cassette_library_dir("test/support/cassettes",
- "test/support/custom_cassettes")
+ "test/support/custom_cassettes")
HTTPoison.start
end
@@ -87,14 +93,6 @@ defmodule PowerDNSex.Managers.RecordsManagerTest do
describe "update/2" do
@tag :records_manager_update
- test "exception given empty zones url" do
- raise_msg = "[Records Manager] Zone URL attribute is empty!"
- assert_raise RuntimeError, raise_msg, fn() ->
- RecordsManager.update(%Zone{}, %Record{})
- end
- end
-
- @tag :records_manager_update
test "the return given correct params" do
use_cassette "records_manager/update/success" do
assert RecordsManager.update(@valid_zone, @updated_record) == :ok
@@ -102,21 +100,12 @@ defmodule PowerDNSex.Managers.RecordsManagerTest do
end
@tag :records_manager_update
- test "the return given incorrect zone" do
+ test "when zone does not exists" do
use_cassette "records_manager/update/not_found" do
- response = RecordsManager.update(@invalid_zone, @updated_record)
- error_msg = "Could not find domain '#{@invalid_zone.name}.'"
- assert response.error == error_msg
- end
- end
-
- @tag :records_manager_update
- test "the return given incorrect params" do
- use_cassette "records_manager/update/invalid_record" do
- response = RecordsManager.update(@valid_zone, @invalid_record)
- error_msg = "Record updated-record.my-domain.art./NS '127.0.0.1': " <>
- "Not in expected format (parsed as '127.0.0.1.')"
- assert response.error == error_msg
+ {:error, error} = RecordsManager.update(@invalid_zone, @updated_record)
+ error_msg = "Record #{@updated_record.name}, type A, not found!"
+ assert error.error == error_msg
+ assert error.http_status_code == 404
end
end
end
diff --git a/test/lib/powerdnsex/managers/zones_manager_test.exs b/test/lib/powerdnsex/managers/zones_manager_test.exs
index d349ea8..9c011e9 100644
--- a/test/lib/powerdnsex/managers/zones_manager_test.exs
+++ b/test/lib/powerdnsex/managers/zones_manager_test.exs
@@ -26,6 +26,15 @@ defmodule PowerDNSex.Managers.ZonesManagerTest do
"2016060601 10800 3600 604800 3600",
disabled: false}
]
+ },
+ %RRSet{
+ name: "my-domain.art.",
+ ttl: 3600,
+ type: "NS",
+ records: [
+ %Record{content: "ns1.domain.com",
+ disabled: false}
+ ]
}
]
@@ -34,6 +43,7 @@ defmodule PowerDNSex.Managers.ZonesManagerTest do
account: "",
serial: 2_016_060_601,
url: "api/v1/servers/localhost/zones/my-domain.art.",
+ nameservers: ["ns1.domain.com"],
rrsets: @expected_rrset}
setup do
@@ -49,7 +59,7 @@ defmodule PowerDNSex.Managers.ZonesManagerTest do
@tag :zones_manager_create
test "return given correct parameters" do
use_cassette "zones_manager/create/success" do
- zone = ZonesManager.create(@valid_zone_test)
+ {:ok, zone} = ZonesManager.create(@valid_zone_test)
assert zone.__struct__ == PowerDNSex.Models.Zone
assert zone.name == @valid_zone_test.name
end
@@ -59,9 +69,11 @@ defmodule PowerDNSex.Managers.ZonesManagerTest do
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
+ {: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
@@ -70,15 +82,16 @@ defmodule PowerDNSex.Managers.ZonesManagerTest 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)
+ {: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
- zone = ZonesManager.show(@valid_zone_test.name)
+ {:ok, zone} = ZonesManager.show(@valid_zone_test.name)
assert zone == @expected_zone
end
end
@@ -87,9 +100,9 @@ defmodule PowerDNSex.Managers.ZonesManagerTest do
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
+ {:error, error} = ZonesManager.show(@unknown_name)
+ assert error.__struct__ == PowerDNSex.Models.Error
+ assert error.error == error_msg
end
end
end
@@ -98,15 +111,15 @@ defmodule PowerDNSex.Managers.ZonesManagerTest 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
+ 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}'"
+ {:error, error} = ZonesManager.delete(@unknown_name)
+ assert error.error == "Could not find domain '#{@unknown_name}'"
end
end
end
diff --git a/test/lib/powerdnsex/models/resource_record_set_test.exs b/test/lib/powerdnsex/models/resource_record_set_test.exs
new file mode 100644
index 0000000..9533beb
--- /dev/null
+++ b/test/lib/powerdnsex/models/resource_record_set_test.exs
@@ -0,0 +1,89 @@
+defmodule PowerDNSex.Models.ResourceRecordSetTest do
+
+ use ExUnit.Case, async: true
+
+ alias PowerDNSex.Models.{Record}
+ alias PowerDNSex.Models.ResourceRecordSet, as: RRSet
+
+ @ns_content "ns1.domain.com."
+ @ns2_content "ns2.domain.com."
+
+ @domain "my-domain.art."
+
+ @record_ns %RRSet {
+ name: "my-domain.art.",
+ ttl: 3600,
+ type: "NS",
+ records: [
+ %Record{content: @ns_content,
+ disabled: false},
+ %Record{content: @ns2_content,
+ disabled: false}
+ ]
+ }
+
+ @record_a %RRSet {
+ name: "store.my-domain.art.",
+ ttl: 3600,
+ type: "A",
+ records: [
+ %Record{content: "182.23.2.3",
+ disabled: false}
+ ]
+ }
+
+ @rrsets [
+ @record_ns,
+ @record_a
+ ]
+
+ describe "nameservers/1" do
+ test "return empty list for nameserver" do
+ assert RRSet.nameservers([]) == []
+ end
+
+ test "return map of content records" do
+ assert RRSet.nameservers(@rrsets) == [@ns_content, @ns2_content]
+ end
+ end
+
+ describe "build/1" do
+ test "build a record" do
+ raw_rrset = %{name: @domain, type: 'A', ttl: 3600, records: [ %{content: "192.168.0.1", disabled: false} ] }
+ rrset = %RRSet{changetype: nil,
+ name: "my-domain.art.",
+ records: [%PowerDNSex.Models.Record{content: "192.168.0.1",
+ disabled: false}], ttl: 3600, type: 'A'}
+ assert RRSet.build(raw_rrset) == rrset
+ end
+ end
+
+ describe "find/1" do
+ test "find a record" do
+ assert RRSet.find(@rrsets, %{name: "store.my-domain.art.", type: "A"}) == @record_a
+ end
+
+ test "doest not find record" do
+ assert RRSet.find(@rrsets, %{name: "site.my-domain.art.", type: "A"}) == nil
+ end
+ end
+
+ describe "update/2" do
+ test "update passing all attributes" do
+ new_attrs = %{name: "page.my-domain.art.",
+ records: [%{content: "192.168.0.1", disabled: false}],
+ ttl: "3600", type: "A"}
+
+ new_record = %PowerDNSex.Models.ResourceRecordSet{changetype: nil,
+ name: "store.my-domain.art.",
+ records: [
+ %PowerDNSex.Models.Record{
+ content: "192.168.0.1",
+ disabled: false}],
+ type: "A",
+ ttl: "3600"}
+
+ assert RRSet.update(@record_a, new_attrs) == new_record
+ end
+ end
+end
diff --git a/test/support/cassettes/zones_manager/show/success.json b/test/support/cassettes/zones_manager/show/success.json
index 91d5316..1d2947a 100644
--- a/test/support/cassettes/zones_manager/show/success.json
+++ b/test/support/cassettes/zones_manager/show/success.json
@@ -11,7 +11,7 @@
"url": "https://my-powerdns.api/api/v1/servers/localhost/zones/my-domain.art."
},
"response": {
- "body": "{\"account\": \"\", \"dnssec\": false, \"id\": \"my-domain.art.\", \"kind\": \"Native\", \"last_check\": 0, \"masters\": [], \"name\": \"my-domain.art.\", \"notified_serial\": 0, \"rrsets\": [{\"comments\": [], \"name\": \"my-domain.art.\", \"records\": [{\"content\": \"a.misconfigured.powerdns.server. hostmaster.my-domain.art. 2016060601 10800 3600 604800 3600\", \"disabled\": false}], \"ttl\": 3600, \"type\": \"SOA\"}], \"serial\": 2016060601, \"soa_edit\": \"\", \"soa_edit_api\": \"\", \"url\": \"api/v1/servers/localhost/zones/my-domain.art.\"}",
+ "body": "{\"account\":\"\",\"dnssec\":false,\"id\":\"my-domain.art.\",\"kind\":\"Native\",\"last_check\":0,\"masters\":[],\"name\":\"my-domain.art.\",\"notified_serial\":0,\"rrsets\":[{\"comments\":[],\"name\":\"my-domain.art.\",\"records\":[{\"content\":\"a.misconfigured.powerdns.server. hostmaster.my-domain.art. 2016060601 10800 3600 604800 3600\",\"disabled\":false}],\"ttl\":3600,\"type\":\"SOA\"},{\"comments\":[],\"name\":\"my-domain.art.\",\"records\":[{\"content\":\"ns1.domain.com\",\"disabled\":false}],\"ttl\":3600,\"type\":\"NS\"}],\"serial\":2016060601,\"soa_edit\":\"\",\"soa_edit_api\":\"\",\"url\":\"api/v1/servers/localhost/zones/my-domain.art.\"}",
"headers": {
"Access-Control-Allow-Origin": "*",
"Connection": "close",
diff --git a/test/support/fake_config.exs b/test/support/fake_config.exs
index 9f95fc2..0c27d93 100644
--- a/test/support/fake_config.exs
+++ b/test/support/fake_config.exs
@@ -3,8 +3,8 @@ defmodule PowerDNSex.FakeConfig do
@app_config_url "https://my-powerdns.api"
- def set_url, do: Application.put_env(:powerdns, :url, @app_config_url)
- def set_token, do: Application.put_env(:powerdns, :token, @app_config_token)
+ def set_url, do: Application.put_env(:powerdnsex, :url, @app_config_url)
+ def set_token, do: Application.put_env(:powerdnsex, :token, @app_config_token)
def token, do: @app_config_token
def url, do: @app_config_url