require 'beaker-hostgenerator'
require 'spec_helper'

module BeakerHostGenerator
      describe Generator do
        let(:options) {
          {
            list_platforms_and_roles: false,
            disable_default_role: false,
            disable_role_config: false,
            hypervisor: 'vmpooler',
          }
        }
        let(:generator) { BeakerHostGenerator::Generator.new(options) }

        describe '__generate_host_roles' do
          it 'Generates a list of roles' do
            {
              {
                "roles" => "aulcdfm",
                "arbitrary_roles" => [],
              } => [
                'agent',
                'ca',
                'classifier',
                'dashboard',
                'database',
                'frictionless',
                'master',
                ],
              {
                "roles" => "a",
                "arbitrary_roles" => ["meow","hello","compile_master"],
              } => [
                'agent',
                'meow',
                'hello',
                'compile_master',
                ],
              {
                "roles" => "",
                "arbitrary_roles" => ["compile_master"],
              } => [
                'compile_master'
                ],
              {
                "roles" => "",
                "arbitrary_roles" => [],
              } => [],
            }.each do |node_info, roles|
              expect( generator.__generate_host_roles(node_info) ).to eq( roles )
            end
          end
        end

        describe '__parse_node_info_token' do

          it 'Raises InvalidNodeSpecError for invalid tokens.' do
            expect{ generator.__parse_node_info_token("64compile_master") }.to \
              raise_error(BeakerHostGenerator::Errors::InvalidNodeSpecError)
          end

          it 'Supports no roles in the spec.' do
            node_info = generator.__parse_node_info_token("64")
            expect( node_info ).to eq({
              "roles" => "",
              "arbitrary_roles" => [],
              "bits" => "64",
            })
          end

          it 'Supports the use of arbitrary roles.' do
            node_info = generator.__parse_node_info_token("64compile_master,ca,blah.mad")
            expect( node_info ).to eq({
              "roles" => "mad",
              "arbitrary_roles" => ["compile_master", "ca", "blah"],
              "bits" => "64",
            })
          end

          context 'When using arbitrary roles'do
            it 'Fails without a role-type delimiter (a period)' do
              expect{ generator.__parse_node_info_token("64compile_master,ca,blah") }.to \
                raise_error(BeakerHostGenerator::Errors::InvalidNodeSpecError)
            end
            it 'It supports no static roles.' do
              node_info = generator.__parse_node_info_token("64compile_master,ca,blah.")
              expect( node_info ).to eq({
                "roles" => "",
                "arbitrary_roles" => ["compile_master", "ca", "blah"],
                "bits" => "64",
              })
            end
          end
        end

      end
end