require "helper"
require "inspec/resource"
require "resources/aws/aws_sns_topics"

require "resource_support/aws"
require "resources/aws/aws_sns_topics"

# MSTB = MockSnsTopicsBackend
# Abbreviation not used outside this file

#=============================================================================#
#                            Constructor Tests
#=============================================================================#
class AwsSnsTopicsConstructor < Minitest::Test
  def setup
    AwsSnsTopics::BackendFactory.select(AwsMSTB::Basic)
  end

  def test_constructor_no_args_ok
    AwsSnsTopics.new
  end

  def test_constructor_reject_unknown_resource_params
    assert_raises(ArgumentError) { AwsSnsTopics.new(bla: "blabla") }
  end
end

#=============================================================================#
#                            Properties
#=============================================================================#
class AwsSnsTopicsProperties < Minitest::Test
  def setup
    AwsSnsTopics::BackendFactory.select(AwsMSTB::Basic)
  end

  def test_property_topics_arns
    basic = AwsSnsTopics.new
    assert_kind_of(Array, basic.topic_arns)
    assert(basic.topic_arns.include?("arn:aws:sns:us-east-1:212312313:test-topic-01"))
    assert(basic.topic_arns.include?("arn:aws:sns:us-east-1:123123129:test-topic-02"))
    refute(basic.topic_arns.include?(nil))
  end
end

#=============================================================================#
#                               Test Fixtures
#=============================================================================#
module AwsMSTB
  class Basic < AwsBackendBase
    def list_topics(query = {})
      OpenStruct.new({
        topics: [
          OpenStruct.new({ topic_arn: "arn:aws:sns:us-east-1:212312313:test-topic-01" }),
          OpenStruct.new({ topic_arn: "arn:aws:sns:us-east-1:123123129:test-topic-02" }),
        ],
      })
    end
  end
end