package yarn

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

	"universe.dagger.io/docker"
	"universe.dagger.io/yarn"
)

dagger.#Plan & {
	client: filesystem: {
		"./data/foo": read: contents: dagger.#FS
		"./data/bar": read: contents: dagger.#FS
	}

	actions: test: {

		// Configuration for all tests
		common: {
			data: client.filesystem."./data/foo".read.contents
		}

		// Run yarn.#Build
		simple: {
			build: yarn.#Build & {
				source: common.data
			}

			verify: #AssertFile & {
				input:    build.output
				path:     "test"
				contents: "output\n"
			}
		}

		// Run yarn.#Build with a custom name
		customName: {
			build: yarn.#Build & {
				name:   "My Build"
				source: common.data
			}
			verify: #AssertFile & {
				input:    build.output
				path:     "test"
				contents: "output\n"
			}
		}

		// Run yarn.#Build with a custom docker image
		customImage: {
			buildImage: docker.#Build & {
				steps: [
					docker.#Pull & {
						source: "alpine"
					},
					docker.#Run & {
						command: {
							name: "apk"
							args: ["add", "yarn", "bash"]
						}
					},
				]
			}

			image: build.output

			build: yarn.#Build & {
				source: common.data
				container: #input: buildImage.output
			}
		}
	}
}

// Make an assertion on the contents of a file
#AssertFile: {
	input:    dagger.#FS
	path:     string
	contents: string

	_read: core.#ReadFile & {
		"input": input
		"path":  path
	}

	actual: _read.contents

	// Assertion
	contents: actual
}