package handlers_test

import (
	"net/http"
	"otaupdate/handlers"
	"otaupdate/services"
	"testing"

	"github.com/fiskerinc/cloud-services/pkg/common"
	mo "github.com/fiskerinc/cloud-services/pkg/db/queries/mocks"
	th "github.com/fiskerinc/cloud-services/pkg/testhelper"
)

func TestUpdateManifestArchive(t *testing.T) {
	mock := mo.MockUpdateManifests{}
	services.GetDB().SetUpdateManifests(&mock)

	tests := []mo.DBHttpTest{
		{
			Name: "Valid data - remove active",
			Request: th.MakeTestRequest(
				http.MethodPut,
				"http://example.com/manifests/archive",
				common.UpdateManifestArchiveRequest{
					IDs: []int64{1, 2, 3},
				},
			),
			ExpectedStatus:   http.StatusOK,
			ExpectedResponse: `{"message":"Archived 3 update manifests"}`,
		},
		{
			Name: "Valid data - make active",
			Request: th.MakeTestRequest(
				http.MethodPut,
				"http://example.com/manifests/archive",
				common.UpdateManifestArchiveRequest{
					IDs: []int64{1, 2, 3},
					Active: true,
				},
			),
			ExpectedStatus:   http.StatusOK,
			ExpectedResponse: `{"message":"Activated 3 update manifests"}`,
		},
		{
			Name:             "No data",
			Request:          th.MakeTestRequest(
				http.MethodPost,
				"http://example.com/manifests/archive",
				nil,
			),
			ExpectedStatus:   http.StatusBadRequest,
			ExpectedResponse: `{"message":"IDs required","error":"Bad Request"}`,
		},
	}

	mo.RunDBTests(t, tests, handlers.HandleUpdateManifestsArchive, &mock)
}
