# frozen_string_literal: true require "rails_helper" RSpec.describe Streams::DnsProviders::Hetzner do let(:stubs) { Faraday::Adapter::Test::Stubs.new } let(:conn) do Faraday.new(url: "https://api.hetzner.cloud/v1") do |f| f.request :json f.response :json f.adapter :test, stubs end end let(:provider) { described_class.new(token: "test-token", zone: "mltv-stream.net", conn: conn) } after { stubs.verify_stubbed_calls } it "upserts an A record (delete then create)" do stubs.delete("/zones/mltv-stream.net/rrsets/ingest-01/A") { [404, {}, ""] } stubs.post("/zones/mltv-stream.net/rrsets") do |env| body = JSON.parse(env.body) expect(body["name"]).to eq("ingest-01") expect(body["type"]).to eq("A") expect(body["records"].first["value"]).to eq("49.13.1.2") [201, { "Content-Type" => "application/json" }, { "rrset" => { "name" => "ingest-01" } }] end expect(provider.upsert_a("ingest-01.mltv-stream.net", "49.13.1.2")).to eq(true) end it "deletes an A record" do stubs.delete("/zones/mltv-stream.net/rrsets/ingest-01/A") { [204, {}, ""] } expect(provider.delete_a("ingest-01.mltv-stream.net")).to eq(true) end end