package netlify

import (
	"dagger.io/dagger"
	"dagger.io/dagger/core"

	"universe.dagger.io/docker"
	"universe.dagger.io/netlify"

	"universe.dagger.io/netlify/test/testutils"
)

dagger.#Plan & {
	client: commands: sops: {
		name: "sops"
		args: ["-d", "../../secrets_sops.yaml"]
		stdout: dagger.#Secret
	}

	actions: test: {

		// Configuration common to all tests
		common: {
			testSecrets: core.#DecodeSecret & {
				input:  client.commands.sops.stdout
				format: "yaml"
			}

			token: testSecrets.output.NETLIFY_TOKEN.contents

			marker: "hello world"

			data: core.#WriteFile & {
				input:    dagger.#Scratch
				path:     "index.html"
				contents: marker
			}
		}

		// Test: deploy a simple site to Netlify
		simple: {
			// Deploy to netlify
			deploy: netlify.#Deploy & {
				team:     "dagger-test"
				token:    common.token
				site:     "dagger-test"
				contents: common.data.output
			}

			verify: testutils.#AssertURL & {
				url:      deploy.deployUrl
				contents: common.marker
			}
		}

		// Test: deploy to Netlify with a custom image
		swapImage: {
			// Deploy to netlify
			deploy: netlify.#Deploy & {
				team:     "dagger-test"
				token:    common.token
				site:     "dagger-test"
				contents: common.data.output
				container: input: customImage.output
			}

			customImage: docker.#Build & {
				steps: [
					docker.#Pull & {
						source: "alpine"
					},
					docker.#Run & {
						command: {
							name: "apk"
							args: [
								"add",
								"--no-cache",
								"yarn",
								"bash",
								"rsync",
								"curl",
								"jq",
							]
						}
					},
					docker.#Run & {
						command: {
							name: "yarn"
							args: ["global", "add", "netlify-cli"]
						}
					},
				]
			}

			verify: testutils.#AssertURL & {
				url:      deploy.deployUrl
				contents: common.marker
			}
		}
	}
}
