package gitea

import (
	"fmt"
	"testing"

	"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
	"github.com/hashicorp/terraform-plugin-sdk/terraform"
)

func TestAccDataSourceGiteaUser_basic(t *testing.T) {

	resource.Test(t, resource.TestCase{
		PreCheck:  func() { testAccPreCheck(t) },
		Providers: testAccProviders,
		Steps: []resource.TestStep{
			// Get user using its username
			{
				Config: testAccDataGiteaUserConfigUsername(),
				Check: resource.ComposeTestCheckFunc(
					testAccDataSourceGiteaUser("data.gitea_user.foo"),
				),
			},
			{
				Config: testAccDataGiteaUserConfigUsername(),
				Check: resource.ComposeTestCheckFunc(
					testAccDataSourceGiteaUser("data.gitea_user.self"),
				),
			},
		},
	})
}

func testAccDataSourceGiteaUser(src string) resource.TestCheckFunc {
	return func(s *terraform.State) error {

		user := s.RootModule().Resources[src]
		userResource := user.Primary.Attributes

		testAttributes := []string{
			"username",
		}

		for _, attribute := range testAttributes {
			if userResource[attribute] != "test01" {
				return fmt.Errorf("Expected user's parameter `%s` to be: %s, but got: `%s`", attribute, userResource[attribute], "test01")
			}
		}

		return nil
	}
}

func testAccDataGiteaUserConfigUsername() string {
	return fmt.Sprintf(`
data "gitea_user" "foo" {
  username = "test01"
}
data "gitea_user" "self" {
}
`)
}
