github.com/cozy/cozy-stack@v0.0.0-20240327093429-939e4a21320e/web/settings/external_ties_test.go (about)

     1  package settings_test
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  
     7  	"github.com/cozy/cozy-stack/model/instance/lifecycle"
     8  	"github.com/cozy/cozy-stack/model/session"
     9  	csettings "github.com/cozy/cozy-stack/model/settings"
    10  	"github.com/cozy/cozy-stack/pkg/config/config"
    11  	"github.com/cozy/cozy-stack/tests/testutils"
    12  	"github.com/gavv/httpexpect/v2"
    13  )
    14  
    15  func TestExternalTies(t *testing.T) {
    16  	config.UseTestFile(t)
    17  	testutils.NeedCouchdb(t)
    18  	setup := testutils.NewSetup(t, t.Name())
    19  	testInstance := setup.GetTestInstance(&lifecycle.Options{
    20  		Locale:      "en",
    21  		Timezone:    "Europe/Berlin",
    22  		Email:       "alice@example.com",
    23  		ContextName: "test-context",
    24  	})
    25  	sessCookie := session.CookieName(testInstance)
    26  
    27  	svc := csettings.NewServiceMock(t)
    28  	ts := setupRouter(t, testInstance, svc)
    29  
    30  	t.Run("WithBlockingSubscription", func(t *testing.T) {
    31  		svc.On("GetExternalTies", testInstance).Return(&csettings.ExternalTies{
    32  			HasBlockingSubscription: true,
    33  		}, nil).Once()
    34  
    35  		e := testutils.CreateTestClient(t, ts.URL)
    36  		obj := e.GET("/settings/external-ties").
    37  			WithCookie(sessCookie, "connected").
    38  			WithHeader("Accept", "application/vnd.api+json").
    39  			Expect().Status(200).
    40  			JSON(httpexpect.ContentOpts{MediaType: "application/vnd.api+json"}).
    41  			Object()
    42  
    43  		data := obj.Value("data").Object()
    44  		data.HasValue("type", "io.cozy.settings")
    45  		data.HasValue("id", "io.cozy.settings.external-ties")
    46  
    47  		attrs := data.Value("attributes").Object()
    48  		attrs.HasValue("has_blocking_subscription", true)
    49  	})
    50  
    51  	t.Run("WithClouderyError", func(t *testing.T) {
    52  		svc.On("GetExternalTies", testInstance).Return(nil, errors.New("unauthorized")).Once()
    53  
    54  		e := testutils.CreateTestClient(t, ts.URL)
    55  		e.GET("/settings/external-ties").
    56  			WithCookie(sessCookie, "connected").
    57  			WithHeader("Accept", "application/vnd.api+json").
    58  			Expect().Status(500).
    59  			Body().Contains("unauthorized")
    60  	})
    61  }