// Copyright 2019 Drone.IO Inc. All rights reserved.
// Use of this source code is governed by the Drone Non-Commercial License
// that can be found in the LICENSE file.

// +build !oss

package core

import "testing"

func TestSecretValidate(t *testing.T) {
	tests := []struct {
		secret *Secret
		error  error
	}{
		{
			secret: &Secret{Name: "password", Data: "correct-horse-battery-staple"},
			error:  nil,
		},
		{
			secret: &Secret{Name: ".some_random-password", Data: "correct-horse-battery-staple"},
			error:  nil,
		},
		{
			secret: &Secret{Name: "password", Data: ""},
			error:  errSecretDataInvalid,
		},
		{
			secret: &Secret{Name: "", Data: "correct-horse-battery-staple"},
			error:  errSecretNameInvalid,
		},
		{
			secret: &Secret{Name: "docker/password", Data: "correct-horse-battery-staple"},
			error:  errSecretNameInvalid,
		},
	}
	for i, test := range tests {
		got, want := test.secret.Validate(), test.error
		if got != want {
			t.Errorf("Want error %v, got %v at index %d", want, got, i)
		}
	}
}

func TestSecretSafeCopy(t *testing.T) {
	before := Secret{
		ID:              1,
		RepoID:          2,
		Name:            "docker_password",
		Namespace:       "octocat",
		Type:            "",
		Data:            "correct-horse-battery-staple",
		PullRequest:     true,
		PullRequestPush: true,
	}
	after := before.Copy()
	if got, want := after.ID, before.ID; got != want {
		t.Errorf("Want secret ID %d, got %d", want, got)
	}
	if got, want := after.RepoID, before.RepoID; got != want {
		t.Errorf("Want secret RepoID %d, got %d", want, got)
	}
	if got, want := after.Name, before.Name; got != want {
		t.Errorf("Want secret Name %s, got %s", want, got)
	}
	if got, want := after.Namespace, before.Namespace; got != want {
		t.Errorf("Want secret Namespace %s, got %s", want, got)
	}
	if got, want := after.PullRequest, before.PullRequest; got != want {
		t.Errorf("Want secret PullRequest %v, got %v", want, got)
	}
	if got, want := after.PullRequestPush, before.PullRequestPush; got != want {
		t.Errorf("Want secret PullRequest %v, got %v", want, got)
	}
	if after.Data != "" {
		t.Errorf("Expect secret is empty after copy")
	}
}