-
Notifications
You must be signed in to change notification settings - Fork 26
/
extension_parser_test.go
116 lines (97 loc) · 2.75 KB
/
extension_parser_test.go
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package cargo_test
import (
"os"
"testing"
"github.com/paketo-buildpacks/packit/v2/cargo"
"github.com/sclevine/spec"
. "github.com/onsi/gomega"
)
func testExtensionParser(t *testing.T, context spec.G, it spec.S) {
var (
Expect = NewWithT(t).Expect
path string
parser cargo.ExtensionParser
)
it.Before(func() {
file, err := os.CreateTemp("", "extension.toml")
Expect(err).NotTo(HaveOccurred())
_, err = file.WriteString(`api = "0.7"
[extension]
id = "some-extension-id"
name = "some-extension-name"
version = "some-extension-version"
[metadata]
include-files = ["some-include-file", "other-include-file"]
pre-package = "some-pre-package-script.sh"
[[metadata.some-map]]
key = "value"
[[metadata.dependencies]]
id = "some-dependency"
name = "Some Dependency"
sha256 = "shasum"
source = "source"
source_sha256 = "source-shasum"
stacks = ["io.buildpacks.stacks.bionic", "org.cloudfoundry.stacks.tiny"]
uri = "http://some-url"
version = "1.2.3"
`)
Expect(err).NotTo(HaveOccurred())
Expect(file.Close()).To(Succeed())
path = file.Name()
parser = cargo.NewExtensionParser()
})
it.After(func() {
Expect(os.RemoveAll(path)).To(Succeed())
})
context("Parse", func() {
it("parses a given extension.toml", func() {
config, err := parser.Parse(path)
Expect(err).NotTo(HaveOccurred())
Expect(config).To(Equal(cargo.ExtensionConfig{
API: "0.7",
Extension: cargo.ConfigExtension{
ID: "some-extension-id",
Name: "some-extension-name",
Version: "some-extension-version",
},
Metadata: cargo.ConfigExtensionMetadata{
IncludeFiles: []string{
"some-include-file",
"other-include-file",
},
PrePackage: "some-pre-package-script.sh",
Dependencies: []cargo.ConfigExtensionMetadataDependency{
{
ID: "some-dependency",
Name: "Some Dependency",
SHA256: "shasum",
Source: "source",
SourceSHA256: "source-shasum",
Stacks: []string{"io.buildpacks.stacks.bionic", "org.cloudfoundry.stacks.tiny"},
URI: "http://some-url",
Version: "1.2.3",
},
},
},
}))
})
context("when the extension.toml does not exist", func() {
it.Before(func() {
Expect(os.Remove(path)).To(Succeed())
})
it("returns an error", func() {
_, err := parser.Parse(path)
Expect(err).To(MatchError(ContainSubstring("no such file or directory")))
})
})
context("when the extension.toml is malformed", func() {
it.Before(func() {
Expect(os.WriteFile(path, []byte("%%%"), 0644)).To(Succeed())
})
it("returns an error", func() {
_, err := parser.Parse(path)
Expect(err).To(MatchError(ContainSubstring("expected '.' or '=', but got '%' instead")))
})
})
})
}