Ctrl K
ComunidadGuías…

api/controller/vm_export_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package controller

import (
	"bytes"
	"context"
	"net/http"
	"net/http/httptest"
	"testing"

	"github.com/go-chi/chi"
	"github.com/goodrain/rainbond/api/handler"
	ctxutil "github.com/goodrain/rainbond/api/util/ctx"
)

func TestVMExportControllerCreateVMExport(t *testing.T) {
	controller := &VMExportController{
		createExport: func(serviceID string, req *handler.VMExportRequest) (*handler.VMExportStatus, error) {
			if serviceID != "service-1" {
				t.Fatalf("unexpected service id %s", serviceID)
			}
			if req.Name != "exp-1" {
				t.Fatalf("unexpected request %#v", req)
			}
			return &handler.VMExportStatus{ExportName: "exp-1"}, nil
		},
	}

	req := httptest.NewRequest(http.MethodPost, "/v2/tenants/demo/services/demo/vm-exports", bytes.NewBufferString(`{"name":"exp-1","description":"demo"}`))
	req = req.WithContext(context.WithValue(req.Context(), ctxutil.ContextKey("service_id"), "service-1"))
	recorder := httptest.NewRecorder()

	controller.CreateVMExport(recorder, req)

	if recorder.Code != http.StatusOK {
		t.Fatalf("expected status 200, got %d", recorder.Code)
	}
}

func TestVMExportControllerCreateVMExportRequiresName(t *testing.T) {
	controller := &VMExportController{}

	req := httptest.NewRequest(http.MethodPost, "/v2/tenants/demo/services/demo/vm-exports", bytes.NewBufferString(`{"description":"demo"}`))
	req = req.WithContext(context.WithValue(req.Context(), ctxutil.ContextKey("service_id"), "service-1"))
	recorder := httptest.NewRecorder()

	controller.CreateVMExport(recorder, req)

	if recorder.Code != http.StatusBadRequest {
		t.Fatalf("expected status 400, got %d", recorder.Code)
	}
}

func TestVMExportControllerGetVMExport(t *testing.T) {
	controller := &VMExportController{
		getExport: func(serviceID, exportName string) (*handler.VMExportStatus, error) {
			if serviceID != "service-1" {
				t.Fatalf("unexpected service id %s", serviceID)
			}
			if exportName != "exp-1" {
				t.Fatalf("unexpected export name %s", exportName)
			}
			return &handler.VMExportStatus{ExportName: "exp-1", Phase: "Ready"}, nil
		},
	}

	req := httptest.NewRequest(http.MethodGet, "/v2/tenants/demo/services/demo/vm-exports/exp-1", nil)
	req = req.WithContext(context.WithValue(req.Context(), ctxutil.ContextKey("service_id"), "service-1"))
	rctx := chi.NewRouteContext()
	rctx.URLParams.Add("name", "exp-1")
	req = req.WithContext(context.WithValue(req.Context(), chi.RouteCtxKey, rctx))
	recorder := httptest.NewRecorder()

	controller.GetVMExport(recorder, req)

	if recorder.Code != http.StatusOK {
		t.Fatalf("expected status 200, got %d", recorder.Code)
	}
}