require 'workers/stack_bootstrap/chef_node_name_builder' RSpec.describe ChefNodeNameBuilder do let(:server_info) do { 'id' => 'server1', 'name' => 'server_name', 'key_name' => 'key', 'private_ip' => '127.0.0.1', 'public_ip' => '127.0.0.2', 'tags' => { 'cid:priority' => '3' } } end let(:project) { build(:project, id: 'proj', with_deploy_env_identifiers: %w(dev)) } let(:env) { project.deploy_env('dev') } let(:name_builder) { described_class.new(server_info, project, env) } let(:build_name) { name_builder.build_node_name } def set_mask(mask) server_info['tags']['cid:node-name-mask'] = mask end describe '#build_node_name' do it 'uses default mask ("$project-$nodename-$env")' do expect(build_name).to eq 'proj-server1-dev' end it 'substitutes project, env and nodename' do set_mask('$project/$env/$nodename') expect(build_name).to eq 'proj/dev/server1' end it 'substitutes $time' do set_mask('$nodename-$time') expect(build_name).to match /server1-\d+/ end it 'substitutes underscores to dashes' do server_info['id'] = 'server_1' expect(build_name).to match 'proj-server-1-dev' end end end