package main

import (
	"context"
	"testing"
	"time"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
	"go.skia.org/infra/go/docker/build/pubsub"
	"go.skia.org/infra/go/exec"
	"golang.org/x/oauth2"
)

type testTokenSource struct {
	token *oauth2.Token
}

func newTestToken() *testTokenSource {
	return &testTokenSource{
		token: &oauth2.Token{
			AccessToken: "foo",
			TokenType:   "Bearer",
			Expiry:      time.Now().Add(10 * time.Minute),
		},
	}
}

func (t *testTokenSource) Token() (*oauth2.Token, error) {
	return t.token, nil
}

func TestBaseImageName(t *testing.T) {
	Init()

	assert.Equal(t, "", baseImageName(""))
	assert.Equal(t, "", baseImageName("debian"))
	assert.Equal(t, "fiddler", baseImageName("gcr.io/skia-public/fiddler"))
	assert.Equal(t, "fiddler", baseImageName("gcr.io/skia-public/fiddler:prod"))
	assert.Equal(t, "docserver", baseImageName("gcr.io/skia-public/docserver:123456"))
}

func TestAddDockerProdTag(t *testing.T) {
	Init()
	docker = "docker"

	loginCalled := false
	pullCalled := false
	tagCalled := false
	pushCalled := false
	mockRun := &exec.CommandCollector{}
	mockRun.SetDelegateRun(func(ctx context.Context, cmd *exec.Command) error {
		assert.Equal(t, "docker", cmd.Name)
		if cmd.Args[0] == "login" {
			assert.Equal(t, []string{"login", "-u", "oauth2accesstoken", "-p", "foo", "https://gcr.io"}, cmd.Args)
			loginCalled = true
		} else if cmd.Args[0] == "pull" {
			assert.Equal(t, []string{"pull", "TestImageName:TestTag"}, cmd.Args)
			pullCalled = true
		} else if cmd.Args[0] == "tag" {
			assert.Equal(t, []string{"tag", "TestImageName:TestTag", "TestImageName:prod"}, cmd.Args)
			tagCalled = true
		} else if cmd.Args[0] == "push" {
			assert.Equal(t, []string{"push", "TestImageName:prod"}, cmd.Args)
			pushCalled = true
		}
		return nil
	})
	mockRunCtx := exec.NewContext(context.Background(), mockRun.Run)

	b := pubsub.BuildInfo{
		ImageName: "TestImageName",
		Tag:       "TestTag",
	}
	err := addDockerProdTag(mockRunCtx, newTestToken(), b)
	require.NoError(t, err)
	assert.True(t, loginCalled)
	assert.True(t, pullCalled)
	assert.True(t, tagCalled)
	assert.True(t, pushCalled)
}

func TestDeployImage(t *testing.T) {
	Init()
	pushk = "pushk"

	pushkCalled := false
	mockRun := &exec.CommandCollector{}
	mockRun.SetDelegateRun(func(ctx context.Context, cmd *exec.Command) error {
		assert.Equal(t, "pushk", cmd.Name)
		assert.Equal(t, []string{"--do-not-override-dirty-image", "--running-in-k8s", "test-app"}, cmd.Args)
		pushkCalled = true
		return nil
	})
	mockRunCtx := exec.NewContext(context.Background(), mockRun.Run)

	err := deployImage(mockRunCtx, "test-app")
	require.NoError(t, err)
	assert.True(t, pushkCalled)
}
