Skip to content

Commit

Permalink
Add register cred def unit tests
Browse files Browse the repository at this point in the history
Signed-off-by: jamshale <[email protected]>
  • Loading branch information
jamshale committed Feb 8, 2024
1 parent e91a755 commit 99efc49
Showing 1 changed file with 281 additions and 10 deletions.
291 changes: 281 additions & 10 deletions aries_cloudagent/anoncreds/default/legacy_indy/tests/test_registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,38 @@
from unittest import IsolatedAsyncioTestCase

import pytest
from anoncreds import Schema
from base58 import alphabet

from aries_cloudagent.anoncreds.base import (
from .....anoncreds.base import (
AnonCredsRegistrationError,
AnonCredsSchemaAlreadyExists,
)
from aries_cloudagent.anoncreds.models.anoncreds_schema import (
from .....anoncreds.models.anoncreds_schema import (
AnonCredsSchema,
GetSchemaResult,
SchemaResult,
)
from aries_cloudagent.askar.profile_anon import AskarAnoncredsProfile
from aries_cloudagent.connections.models.conn_record import ConnRecord
from aries_cloudagent.core.in_memory.profile import InMemoryProfile
from aries_cloudagent.ledger.error import LedgerError, LedgerObjectAlreadyExistsError
from aries_cloudagent.messaging.responder import BaseResponder
from aries_cloudagent.protocols.endorse_transaction.v1_0.manager import (
from .....askar.profile_anon import AskarAnoncredsProfile
from .....connections.models.conn_record import ConnRecord
from .....core.in_memory.profile import InMemoryProfile
from .....ledger.base import BaseLedger
from .....ledger.error import LedgerError, LedgerObjectAlreadyExistsError
from .....messaging.responder import BaseResponder
from .....protocols.endorse_transaction.v1_0.manager import (
TransactionManager,
)
from aries_cloudagent.tests import mock

from .....protocols.endorse_transaction.v1_0.models.transaction_record import (
TransactionRecord,
)
from .....tests import mock
from ....issuer import AnonCredsIssuer
from ....models.anoncreds_cred_def import (
CredDef,
CredDefResult,
CredDefValue,
CredDefValuePrimary,
)
from .. import registry as test_module

B58 = alphabet if isinstance(alphabet, str) else alphabet.decode("ascii")
Expand Down Expand Up @@ -241,6 +253,265 @@ def serialize(self):
BaseResponder
)._instance.send.called

@mock.patch.object(
AnonCredsIssuer, "credential_definition_in_wallet", return_value=False
)
async def test_register_credential_definition_no_endorsement(self, mock_in_wallet):
schema = Schema.create(
name="MYCO Biomarker",
version="1.0",
issuer_id="CsQY9MGeD3CQP4EyuVFo5m",
attr_names=["attr1", "attr2"],
)

schema_result = GetSchemaResult(
schema_id="schema-id",
schema=schema,
schema_metadata={
"seqNo": 1,
},
resolution_metadata={},
)

cred_def = CredDef(
issuer_id="CsQY9MGeD3CQP4EyuVFo5m",
schema_id="CsQY9MGeD3CQP4EyuVFo5m:2:MYCO Biomarker:0.0.3",
tag="default",
type="CL",
value=CredDefValue(primary=CredDefValuePrimary("n", "s", {}, "rctxt", "z")),
)

self.profile.context.injector.bind_instance(
BaseLedger,
mock.MagicMock(
send_credential_definition_anoncreds=mock.CoroutineMock(return_value=2)
),
)

result = await self.registry.register_credential_definition(
self.profile, schema_result, cred_def, {}
)

assert isinstance(result, CredDefResult)
assert mock_in_wallet.called

@mock.patch.object(
AnonCredsIssuer, "credential_definition_in_wallet", return_value=False
)
@mock.patch.object(
ConnRecord,
"retrieve_by_id",
return_value=mock.CoroutineMock(
metadata_get=mock.CoroutineMock(return_value={"endorser_did": "test_did"})
),
)
@mock.patch.object(
TransactionManager,
"create_record",
return_value=TransactionRecord(),
)
async def test_register_credential_definition_with_author_role(
self, mock_create_record, mock_get_endorser_info, mock_in_wallet
):
schema = Schema.create(
name="MYCO Biomarker",
version="1.0",
issuer_id="CsQY9MGeD3CQP4EyuVFo5m",
attr_names=["attr1", "attr2"],
)

schema_result = GetSchemaResult(
schema_id="schema-id",
schema=schema,
schema_metadata={
"seqNo": 1,
},
resolution_metadata={},
)

cred_def = CredDef(
issuer_id="CsQY9MGeD3CQP4EyuVFo5m",
schema_id="CsQY9MGeD3CQP4EyuVFo5m:2:MYCO Biomarker:0.0.3",
tag="default",
type="CL",
value=CredDefValue(primary=CredDefValuePrimary("n", "s", {}, "rctxt", "z")),
)

self.profile.context.injector.bind_instance(
BaseLedger,
mock.MagicMock(
send_credential_definition_anoncreds=mock.CoroutineMock(
return_value=("id", {"signed_txn": "txn"})
)
),
)
self.profile.settings.set_value("endorser.author", True)

result = await self.registry.register_credential_definition(
self.profile,
schema_result,
cred_def,
{"endorser_connection_id": "test_connection_id"},
)

assert isinstance(result, CredDefResult)
assert result.job_id is not None
assert mock_in_wallet.called
assert mock_get_endorser_info.called
assert mock_create_record.called

@mock.patch.object(
AnonCredsIssuer, "credential_definition_in_wallet", return_value=False
)
@mock.patch.object(
ConnRecord,
"retrieve_by_id",
return_value=mock.CoroutineMock(
metadata_get=mock.CoroutineMock(return_value={"endorser_did": "test_did"})
),
)
@mock.patch.object(
TransactionManager,
"create_record",
return_value=TransactionRecord(),
)
async def test_register_credential_definition_with_create_transaction_option(
self, mock_create_record, mock_get_endorser_info, mock_in_wallet
):
schema = Schema.create(
name="MYCO Biomarker",
version="1.0",
issuer_id="CsQY9MGeD3CQP4EyuVFo5m",
attr_names=["attr1", "attr2"],
)

schema_result = GetSchemaResult(
schema_id="schema-id",
schema=schema,
schema_metadata={
"seqNo": 1,
},
resolution_metadata={},
)

cred_def = CredDef(
issuer_id="CsQY9MGeD3CQP4EyuVFo5m",
schema_id="CsQY9MGeD3CQP4EyuVFo5m:2:MYCO Biomarker:0.0.3",
tag="default",
type="CL",
value=CredDefValue(primary=CredDefValuePrimary("n", "s", {}, "rctxt", "z")),
)

self.profile.context.injector.bind_instance(
BaseLedger,
mock.MagicMock(
send_credential_definition_anoncreds=mock.CoroutineMock(
return_value=("id", {"signed_txn": "txn"})
)
),
)

result = await self.registry.register_credential_definition(
self.profile,
schema_result,
cred_def,
{
"endorser_connection_id": "test_connection_id",
"create_transaction_for_endorser": True,
},
)

assert isinstance(result, CredDefResult)
assert result.job_id is not None
assert mock_in_wallet.called
assert mock_get_endorser_info.called
assert mock_create_record.called

@mock.patch.object(
AnonCredsIssuer, "credential_definition_in_wallet", return_value=False
)
@mock.patch.object(
ConnRecord,
"retrieve_by_id",
return_value=mock.CoroutineMock(
metadata_get=mock.CoroutineMock(return_value={"endorser_did": "test_did"})
),
)
@mock.patch.object(
TransactionManager,
"create_record",
return_value=TransactionRecord(),
)
@mock.patch.object(
TransactionManager,
"create_request",
return_value=(TransactionRecord(), "transaction_request"),
)
async def test_register_credential_definition_with_transaction_and_auto_request(
self,
mock_create_request,
mock_create_record,
mock_get_endorser_info,
mock_in_wallet,
):
schema = Schema.create(
name="MYCO Biomarker",
version="1.0",
issuer_id="CsQY9MGeD3CQP4EyuVFo5m",
attr_names=["attr1", "attr2"],
)

schema_result = GetSchemaResult(
schema_id="schema-id",
schema=schema,
schema_metadata={
"seqNo": 1,
},
resolution_metadata={},
)

cred_def = CredDef(
issuer_id="CsQY9MGeD3CQP4EyuVFo5m",
schema_id="CsQY9MGeD3CQP4EyuVFo5m:2:MYCO Biomarker:0.0.3",
tag="default",
type="CL",
value=CredDefValue(primary=CredDefValuePrimary("n", "s", {}, "rctxt", "z")),
)

self.profile.context.injector.bind_instance(
BaseLedger,
mock.MagicMock(
send_credential_definition_anoncreds=mock.CoroutineMock(
return_value=("id", {"signed_txn": "txn"})
)
),
)
self.profile.context.injector.bind_instance(
BaseResponder,
mock.MagicMock(send=mock.CoroutineMock(return_value=None)),
)
self.profile.settings.set_value("endorser.auto_request", True)

result = await self.registry.register_credential_definition(
self.profile,
schema_result,
cred_def,
{
"endorser_connection_id": "test_connection_id",
"create_transaction_for_endorser": True,
},
)

assert isinstance(result, CredDefResult)
assert result.job_id is not None
assert mock_in_wallet.called
assert mock_get_endorser_info.called
assert mock_create_record.called
assert mock_create_request.called
assert self.profile.context.injector.get_provider(
BaseResponder
)._instance.send.called

async def test_txn_submit(self):
self.profile.inject = mock.MagicMock(
side_effect=[
Expand Down

0 comments on commit 99efc49

Please sign in to comment.