github.com/navikt/knorten@v0.0.0-20240419132333-1333f46ed8b6/pkg/api/usergsm_test.go (about)

     1  package api
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"fmt"
     7  	"testing"
     8  
     9  	"github.com/google/go-cmp/cmp"
    10  	"github.com/navikt/knorten/pkg/database"
    11  	"github.com/navikt/knorten/pkg/database/gensql"
    12  )
    13  
    14  func TestUserGSMAPI(t *testing.T) {
    15  	ctx := context.Background()
    16  
    17  	t.Run("create User Google Secret Manager", func(t *testing.T) {
    18  		oldEvents, err := repo.EventsGetType(ctx, database.EventTypeCreateUserGSM)
    19  		if err != nil {
    20  			t.Error(err)
    21  		}
    22  
    23  		resp, err := server.Client().PostForm(fmt.Sprintf("%v/secret/new", server.URL), nil)
    24  		if err != nil {
    25  			t.Error(err)
    26  		}
    27  		defer resp.Body.Close()
    28  
    29  		events, err := repo.EventsGetType(ctx, database.EventTypeCreateUserGSM)
    30  		if err != nil {
    31  			t.Error(err)
    32  		}
    33  
    34  		newEvents := getNewEvents(oldEvents, events)
    35  		secretManager, err := getUserGSMEvent(newEvents, testUser.Email)
    36  		if err != nil {
    37  			t.Error(err)
    38  		}
    39  
    40  		want := gensql.UserGoogleSecretManager{
    41  			Owner: testUser.Email,
    42  			Name:  getNormalizedNameFromEmail(testUser.Email),
    43  		}
    44  		if diff := cmp.Diff(want, secretManager); diff != "" {
    45  			t.Errorf("mismatch (-want +got):\n%s", diff)
    46  		}
    47  	})
    48  
    49  	t.Run("delete User Google Secret Manager", func(t *testing.T) {
    50  		resp, err := server.Client().PostForm(fmt.Sprintf("%v/secret/delete", server.URL), nil)
    51  		if err != nil {
    52  			t.Error(err)
    53  		}
    54  		defer resp.Body.Close()
    55  
    56  		events, err := repo.EventsGetType(ctx, database.EventTypeDeleteUserGSM)
    57  		if err != nil {
    58  			t.Error(err)
    59  		}
    60  
    61  		if !deleteEventCreatedForTeam(events, testUser.Email) {
    62  			t.Errorf("delete secret: no event registered for user %v", testUser.Email)
    63  		}
    64  	})
    65  }
    66  
    67  func getUserGSMEvent(events []gensql.Event, user string) (gensql.UserGoogleSecretManager, error) {
    68  	for _, event := range events {
    69  		payload := gensql.UserGoogleSecretManager{}
    70  		err := json.Unmarshal(event.Payload, &payload)
    71  		if err != nil {
    72  			return gensql.UserGoogleSecretManager{}, err
    73  		}
    74  
    75  		if payload.Owner == user {
    76  			return payload, nil
    77  		}
    78  	}
    79  
    80  	return gensql.UserGoogleSecretManager{}, nil
    81  }