require_relative "../../../base" require Vagrant.source_root.join("plugins/providers/virtualbox/config") describe VagrantPlugins::ProviderVirtualBox::Config do let(:machine) { double("machine") } def assert_invalid errors = subject.validate(machine) if !errors.values.any? { |v| !v.empty? } raise "No errors: #{errors.inspect}" end end def assert_valid errors = subject.validate(machine) if !errors.values.all? { |v| v.empty? } raise "Errors: #{errors.inspect}" end end def valid_defaults subject.image = "foo" end before do vm_config = double("vm_config") allow(vm_config).to receive(:networks).and_return([]) config = double("config") allow(config).to receive(:vm).and_return(vm_config) allow(machine).to receive(:config).and_return(config) end its "valid by default" do subject.finalize! assert_valid end context "defaults" do before { subject.finalize! } it { expect(subject.check_guest_additions).to be(true) } it { expect(subject.gui).to be(false) } it { expect(subject.name).to be_nil } it { expect(subject.functional_vboxsf).to be(true) } it { expect(subject.default_nic_type).to be_nil } it "should have one NAT adapter" do expect(subject.network_adapters).to eql({ 1 => [:nat, {}], }) end end describe "#default_nic_type" do let(:nic_type) { "custom" } before do subject.default_nic_type = nic_type subject.finalize! end it { expect(subject.default_nic_type).to eq(nic_type) } end describe "#merge" do let(:one) { described_class.new } let(:two) { described_class.new } subject { one.merge(two) } it "merges the customizations" do one.customize ["foo"] two.customize ["bar"] expect(subject.customizations).to eq([ ["pre-boot", ["foo"]], ["pre-boot", ["bar"]]]) end end describe "#network_adapter" do it "configures additional adapters" do subject.network_adapter(2, :bridged, auto_config: true) expect(subject.network_adapters[2]).to eql( [:bridged, auto_config: true]) end end end