From cea7d7fc3472315e545893c87ae18a58ee86b72f Mon Sep 17 00:00:00 2001
From: Lyuben Penkovski <lyuben.penkovski@vereign.com>
Date: Fri, 24 Jun 2022 11:24:35 +0300
Subject: [PATCH] Unit tests for service.GetKeys

---
 internal/service/signer/service_test.go | 90 +++++++++++++++++++++++++
 1 file changed, 90 insertions(+)

diff --git a/internal/service/signer/service_test.go b/internal/service/signer/service_test.go
index a182a67..33f063b 100644
--- a/internal/service/signer/service_test.go
+++ b/internal/service/signer/service_test.go
@@ -63,6 +63,96 @@ func TestService_GetKey(t *testing.T) {
 	})
 }
 
+func TestService_GetKeys(t *testing.T) {
+	t.Run("signer returns error when getting keys", func(t *testing.T) {
+		vaultError := &signerfakes.FakeVault{
+			KeysStub: func(ctx context.Context) ([]*signer.VaultKey, error) {
+				return nil, errors.New(errors.Internal, "some error")
+			},
+		}
+
+		svc := signer.New(vaultError, "issuer", "default key", []string{}, http.DefaultClient, zap.NewNop())
+		result, err := svc.GetKeys(context.Background())
+		assert.Nil(t, result)
+		assert.Error(t, err)
+		e, ok := err.(*errors.Error)
+		assert.True(t, ok)
+		assert.Equal(t, errors.Internal, e.Kind)
+	})
+
+	t.Run("signer returns one ecdsa-p256 key successfully", func(t *testing.T) {
+		signerOK := &signerfakes.FakeVault{
+			KeysStub: func(ctx context.Context) ([]*signer.VaultKey, error) {
+				return []*signer.VaultKey{
+					{
+						Name:      "key1",
+						Type:      "ecdsa-p256",
+						PublicKey: "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERTx/2cyYcGVSIRP/826S32BiZxSg\nnzyXgRYmKP8N2l26ec/MwCdsHIEyraX1ZYqwMUT4wO9fqFiGsRKyMBpPnQ==\n-----END PUBLIC KEY-----\n",
+					},
+				}, nil
+			},
+		}
+
+		svc := signer.New(signerOK, "issuer", "default key", []string{"ecdsa-p256"}, http.DefaultClient, zap.NewNop())
+		result, err := svc.GetKeys(context.Background())
+		assert.NotNil(t, result)
+		assert.NoError(t, err)
+
+		assert.Len(t, result, 1)
+		assert.Equal(t, "key1", result[0].ID)
+		assert.Equal(t, "JsonWebKey2020", result[0].Type)
+		assert.NotNil(t, result[0].PublicKeyJWK)
+
+		pub, ok := result[0].PublicKeyJWK.(*jose.JSONWebKey)
+		assert.True(t, ok)
+		assert.NotNil(t, pub)
+		assert.IsType(t, (*ecdsa.PublicKey)(nil), pub.Key)
+	})
+
+	t.Run("signer returns two ecdsa-p256 key successfully", func(t *testing.T) {
+		signerOK := &signerfakes.FakeVault{
+			KeysStub: func(ctx context.Context) ([]*signer.VaultKey, error) {
+				return []*signer.VaultKey{
+					{
+						Name:      "key1",
+						Type:      "ecdsa-p256",
+						PublicKey: "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERTx/2cyYcGVSIRP/826S32BiZxSg\nnzyXgRYmKP8N2l26ec/MwCdsHIEyraX1ZYqwMUT4wO9fqFiGsRKyMBpPnQ==\n-----END PUBLIC KEY-----\n",
+					},
+					{
+						Name:      "key2",
+						Type:      "ecdsa-p256",
+						PublicKey: "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERTx/2cyYcGVSIRP/826S32BiZxSg\nnzyXgRYmKP8N2l26ec/MwCdsHIEyraX1ZYqwMUT4wO9fqFiGsRKyMBpPnQ==\n-----END PUBLIC KEY-----\n",
+					},
+				}, nil
+			},
+		}
+
+		svc := signer.New(signerOK, "issuer", "default key", []string{"ecdsa-p256"}, http.DefaultClient, zap.NewNop())
+		result, err := svc.GetKeys(context.Background())
+		assert.NotNil(t, result)
+		assert.NoError(t, err)
+		assert.Len(t, result, 2)
+
+		assert.Equal(t, "key1", result[0].ID)
+		assert.Equal(t, "JsonWebKey2020", result[0].Type)
+		assert.NotNil(t, result[0].PublicKeyJWK)
+
+		pub, ok := result[0].PublicKeyJWK.(*jose.JSONWebKey)
+		assert.True(t, ok)
+		assert.NotNil(t, pub)
+		assert.IsType(t, (*ecdsa.PublicKey)(nil), pub.Key)
+
+		assert.Equal(t, "key2", result[1].ID)
+		assert.Equal(t, "JsonWebKey2020", result[1].Type)
+		assert.NotNil(t, result[1].PublicKeyJWK)
+
+		pub, ok = result[1].PublicKeyJWK.(*jose.JSONWebKey)
+		assert.True(t, ok)
+		assert.NotNil(t, pub)
+		assert.IsType(t, (*ecdsa.PublicKey)(nil), pub.Key)
+	})
+}
+
 func TestService_CredentialProof(t *testing.T) {
 	tests := []struct {
 		name          string
-- 
GitLab