package acceptance

import (
	"time"

	"github.com/pivotal-cf-experimental/warrant"

	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
)

var _ = Describe("User Lifecycle", func() {
	var (
		client warrant.Warrant
		user   warrant.User
	)

	BeforeEach(func() {
		client = warrant.New(warrant.Config{
			Host:          UAAHost,
			SkipVerifySSL: true,
			TraceWriter:   TraceWriter,
		})
	})

	AfterEach(func() {
		client.Users.Delete(user.ID, UAAToken)

		_, err := client.Users.Get(user.ID, UAAToken)
		Expect(err).To(BeAssignableToTypeOf(warrant.NotFoundError{}))
	})
		})

		It("requires the scim audience", func() {
			token = fakeUAAServer.ClientTokenFor("admin", []string{"scim.write"}, []string{"banana"})
			err := service.Delete(user.ID, token)
			Expect(err).To(BeAssignableToTypeOf(warrant.UnauthorizedError{}))
		})

		It("returns an error when the user does not exist", func() {
			err := service.Delete("non-existant-user-guid", token)
			Expect(err).To(BeAssignableToTypeOf(warrant.NotFoundError{}))
		})
	})

	Describe("Update", func() {
		var user warrant.User

		BeforeEach(func() {
			var err error
			user, err = service.Create("new-user", "*****@*****.**", token)
			Expect(err).NotTo(HaveOccurred())
		})

		It("updates an existing user", func() {
			user.UserName = "******"
			updatedUser, err := service.Update(user, token)
			Expect(err).NotTo(HaveOccurred())

			fetchedUser, err := service.Get(user.ID, token)
			Expect(err).NotTo(HaveOccurred())
			Expect(fetchedUser).To(Equal(updatedUser))