// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package artifactory

import (
	"path/filepath"
	"reflect"
	"testing"

	"go.fuchsia.dev/fuchsia/tools/build/lib"
)

// Implements imgModules
type mockModules struct {
	imgs []build.Image
}

func (m mockModules) BuildDir() string {
	return "BUILD_DIR"
}

func (m mockModules) ImageManifest() string {
	return "BUILD_DIR/IMAGE_MANIFEST"
}

func (m mockModules) Images() []build.Image {
	return m.imgs
}

func TestImageUploads(t *testing.T) {
	m := &mockModules{
		imgs: []build.Image{
			{
				PaveArgs: []string{"--bootloader"},
				Name:     "bootloader",
				Path:     "bootloader",
				Type:     "blk",
			},
			{
				PaveArgs: []string{"--zirconr"},
				Name:     "zircon-r",
				Path:     "zedboot.zbi",
				Type:     "zbi",
			},
			{
				PaveArgs: []string{"--zircona"},
				Name:     "zircon-a",
				Path:     "fuchsia.zbi",
				Type:     "zbi",
			},
			{
				NetbootArgs: []string{"--boot"},
				Name:        "fuchsia",
				Path:        "fuchsia.zbi",
				Type:        "zbi",
			},
			{
				Name: "qemu-kernel",
				Path: "qemu-kernel.bin",
				Type: "kernel",
			},
		},
	}

	expected := []Upload{
		{
			Source:      "BUILD_DIR/IMAGE_MANIFEST",
			Destination: "namespace/IMAGE_MANIFEST",
		},
		{
			Source:      filepath.Join("BUILD_DIR", "bootloader"),
			Destination: "namespace/bootloader",
			Compress:    true,
		},
		{
			Source:      filepath.Join("BUILD_DIR", "zedboot.zbi"),
			Destination: "namespace/zedboot.zbi",
			Compress:    true,
		},
		{
			Source:      filepath.Join("BUILD_DIR", "fuchsia.zbi"),
			Destination: "namespace/fuchsia.zbi",
			Compress:    true,
		},
		{
			Source:      filepath.Join("BUILD_DIR", "qemu-kernel.bin"),
			Destination: "namespace/qemu-kernel.bin",
			Compress:    true,
		},
	}
	actual := imageUploads(m, "namespace")
	if !reflect.DeepEqual(actual, expected) {
		t.Fatalf("unexpected image uploads:\nexpected: %v\nactual: %v\n", expected, actual)
	}
}
