forked from cloudfoundry-attic/bosh-workspace
-
Notifications
You must be signed in to change notification settings - Fork 0
/
manifest_builder_spec.rb
70 lines (61 loc) · 2.19 KB
/
manifest_builder_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
describe Bosh::Workspace::ManifestBuilder do
let(:project_deployment) { instance_double("Bosh::Workspace::Project_Deployment",
name: "bar",
templates: ["foo.yml"],
merged_file: ".deployments/foo.yml",
merge_tool: Bosh::Workspace::MergeTool.new)
}
let(:work_dir) { asset_dir("manifests-repo") }
describe ".build" do
subject { Bosh::Workspace::ManifestBuilder.build project_deployment, work_dir }
let(:manifest_builder) {
instance_double("Bosh::Workspace::ManifestBuilder") }
it "creates builder and merges templates" do
expect(Bosh::Workspace::ManifestBuilder).to receive(:new)
.with(project_deployment, work_dir).and_return(manifest_builder)
expect(manifest_builder).to receive(:merge_templates)
subject
end
end
describe "#merge_templates" do
subject { Bosh::Workspace::ManifestBuilder.new(project_deployment, work_dir) }
before do
allow(File).to receive(:exists?).with(/templates\//)
.and_return(template_exists)
end
context "missing template" do
let(:template_exists) { false }
it "raises error" do
expect { subject.merge_templates }.to raise_error(/does not exist/)
end
end
context "template exists" do
let(:template_exists) { true }
let(:dir_exists) { true }
before do
allow(File).to receive(:exists?).with(/\.stubs/).and_return(dir_exists)
expect(Bosh::Workspace::StubFile).to receive(:create)
.with(/\.stubs\/.+yml/, project_deployment)
end
context "no hidden dirs" do
let(:dir_exists) { false }
it "creates hidden dirs" do
expect(subject.merge_tool).to receive(:merge)
expect(Dir).to receive(:mkdir).with(/.stubs/)
subject.merge_templates
end
end
it "generates manifest with spiff" do
expect(subject.merge_tool).to receive(:merge) do |args|
if args.is_a?(Array)
expect(args.first).to match(/\/templates\/.+yml/)
expect(args.last).to match(/\.stubs\/.+yml/)
else
expect(args).to match(/\.deployments\/.+yml/)
end
end
subject.merge_templates
end
end
end
end