From 0081571ba1c917d6ca7053d96e4f270bacd0bf4f Mon Sep 17 00:00:00 2001 From: Costas Papastathis Date: Fri, 28 Apr 2023 15:53:04 +0300 Subject: [PATCH] adding encoding extension --- cargo/extension_config.go | 6 +- cargo/extension_config_test.go | 110 ++++++++++++++++++++++++++++++++- 2 files changed, 110 insertions(+), 6 deletions(-) diff --git a/cargo/extension_config.go b/cargo/extension_config.go index 08004673..67cfe826 100644 --- a/cargo/extension_config.go +++ b/cargo/extension_config.go @@ -36,10 +36,10 @@ type ConfigExtensionMetadataDependency struct { } type ConfigExtensionMetadataConfiguration struct { Default string `toml:"default" json:"default,omitempty"` - Description string `toml:"description" json:"description,omitempty"` - Launch bool `toml:"launch" json:"launch,omitempty"` + Launch bool `toml:"launch" json:"launch,omitempty"` + Description string `toml:"description" json:"description,omitempty"` + Build bool `toml:"build" json:"build,omitempty"` Name string `toml:"name" json:"name,omitempty"` - Build bool `toml:"build" json:"build,omitempty"` } type ConfigExtension struct { ID string `toml:"id" json:"id,omitempty"` diff --git a/cargo/extension_config_test.go b/cargo/extension_config_test.go index be300f66..73e7491f 100644 --- a/cargo/extension_config_test.go +++ b/cargo/extension_config_test.go @@ -1,6 +1,8 @@ package cargo_test import ( + "bytes" + "strings" "testing" @@ -8,13 +10,118 @@ import ( "github.com/sclevine/spec" . "github.com/onsi/gomega" + . "github.com/paketo-buildpacks/packit/v2/matchers" ) func testExtensionConfig(t *testing.T, context spec.G, it spec.S) { var ( Expect = NewWithT(t).Expect + buffer *bytes.Buffer ) + it.Before(func() { + buffer = bytes.NewBuffer(nil) + }) + + context("EncodeConfig", func() { + it("encodes the config to TOML", func() { + + err := cargo.EncodeExtensionConfig(buffer, cargo.ExtensionConfig{ + API: "0.7", + Extension: cargo.ConfigExtension{ + ID: "some-extension-id", + Name: "some-extension-name", + Version: "some-extension-version", + Homepage: "some-extension-homepage", + Description: "some-extension-description", + Keywords: []string{"some-extension-keyword"}, + Licenses: []cargo.ConfigExtensionLicense{ + { + Type: "some-license-type", + URI: "some-license-uri", + }, + }, + }, + Metadata: cargo.ConfigExtensionMetadata{ + IncludeFiles: []string{ + "some-include-file", + "other-include-file", + }, + PrePackage: "some-pre-package-script.sh", + Dependencies: []cargo.ConfigExtensionMetadataDependency{ + { + Checksum: "sha256:some-sum", + ID: "some-dependency", + Licenses: []interface{}{"fancy-license", "fancy-license-2"}, + Name: "Some Dependency", + SHA256: "shasum", + Source: "source", + SourceChecksum: "sha256:source-shasum", + SourceSHA256: "source-shasum", + Stacks: []string{"io.buildpacks.stacks.bionic", "org.cloudfoundry.stacks.tiny"}, + URI: "http://some-url", + Version: "1.2.3", + }, + }, + Configurations: []cargo.ConfigExtensionMetadataConfiguration{ + { + Default: "0", + Description: "some-metadata-configuration-description", + Launch: true, + Name: "SOME_METADATA_CONFIGURATION_NAME", + Build: true, + }, + }, + DefaultVersions: map[string]string{ + "some-dependency": "1.2.x", + }, + }, + }) + Expect(err).NotTo(HaveOccurred()) + Expect(buffer.String()).To(MatchTOML(` +api = "0.7" + +[extension] + description = "some-extension-description" + homepage = "some-extension-homepage" + id = "some-extension-id" + keywords = ["some-extension-keyword"] + name = "some-extension-name" + version = "some-extension-version" + + [[extension.licenses]] + type = "some-license-type" + uri = "some-license-uri" + +[metadata] + include-files = ["some-include-file", "other-include-file"] + pre-package = "some-pre-package-script.sh" + + [[metadata.configurations]] + build = true + description = "some-metadata-configuration-description" + launch = true + default = "0" + name = "SOME_METADATA_CONFIGURATION_NAME" + [metadata.default-versions] + some-dependency = "1.2.x" + + [[metadata.dependencies]] + checksum = "sha256:some-sum" + id = "some-dependency" + licenses = ["fancy-license", "fancy-license-2"] + name = "Some Dependency" + sha256 = "shasum" + source = "source" + source-checksum = "sha256:source-shasum" + source_sha256 = "source-shasum" + stacks = ["io.buildpacks.stacks.bionic", "org.cloudfoundry.stacks.tiny"] + uri = "http://some-url" + version = "1.2.3" +`)) + }) + }) + context("DecodeExtensionConfig", func() { it("decodes TOML to Extensionconfig", func() { tomlBuffer := strings.NewReader(` @@ -39,9 +146,6 @@ keywords = [ "some-extension-keyword" ] [metadata.default-versions] some-dependency = "1.2.x" -[[metadata.some-map]] - key = "value" - [[metadata.dependencies]] checksum = "sha256:some-sum" id = "some-dependency"