package couchdb import ( "context" "errors" "testing" "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" ) func TestUserMigration(t *testing.T) { userSecret := &corev1.Secret{ TypeMeta: metav1.TypeMeta{ APIVersion: "v1", Kind: "Secret", }, ObjectMeta: metav1.ObjectMeta{ Namespace: Namespace, Name: StoreServerName, }, Data: map[string][]byte{ SecretUsername: SecretUsernameData, SecretPassword: SecretPasswordData, SecretAdminsIni: SecretAdminsIniData, }, } ctx := context.Background() cl := fake.NewClientBuilder().Build() assert.NoError(t, cl.Create(ctx, userSecret)) secretKey := client.ObjectKeyFromObject(userSecret) userCreds := &UserCredentials{URI: SecretURIData} secret, err := userCreds.FromSecret(ctx, cl, secretKey) assert.True(t, errors.Is(err, ErrCouchDBURIMissing)) assert.Nil(t, secret) // migrate updatedSecret, err := userCreds.ToSecret(ctx, cl, secretKey) assert.NoError(t, err) assert.Equal(t, updatedSecret.Data[SecretUsername], userSecret.Data[SecretUsername]) assert.Equal(t, updatedSecret.Data[SecretPassword], userSecret.Data[SecretPassword]) assert.True(t, len(updatedSecret.Data[SecretAdminsIni]) == 0) // this should be updated assert.Equal(t, updatedSecret.Data[SecretURI], SecretURIData) } func TestUserAlreadyMigrated(t *testing.T) { userSecret := &corev1.Secret{ TypeMeta: metav1.TypeMeta{ APIVersion: "v1", Kind: "Secret", }, ObjectMeta: metav1.ObjectMeta{ Namespace: Namespace, Name: StoreServerName, }, Data: map[string][]byte{ SecretUsername: SecretUsernameData, SecretPassword: SecretPasswordData, SecretURI: SecretURIData, }, } ctx := context.Background() cl := fake.NewClientBuilder().Build() assert.NoError(t, cl.Create(ctx, userSecret)) secretKey := client.ObjectKeyFromObject(userSecret) userCreds := &UserCredentials{URI: SecretURIData} secret, err := userCreds.FromSecret(ctx, cl, secretKey) assert.NoError(t, err) assert.NotNil(t, secret) updatedSecret := &corev1.Secret{} assert.NoError(t, cl.Get(ctx, secretKey, updatedSecret)) assert.Equal(t, updatedSecret.Data[SecretUsername], userSecret.Data[SecretUsername]) assert.Equal(t, updatedSecret.Data[SecretPassword], userSecret.Data[SecretPassword]) assert.True(t, len(updatedSecret.Data[SecretAdminsIni]) == 0) // this should be updated assert.Equal(t, updatedSecret.Data[SecretURI], userSecret.Data[SecretURI]) }