Skip to content
This repository has been archived by the owner on May 28, 2024. It is now read-only.

Commit

Permalink
Create credential on update if it does not exist.
Browse files Browse the repository at this point in the history
  • Loading branch information
lauravuo committed Apr 27, 2023
1 parent 70e1fc1 commit 7d7768e
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 7 deletions.
9 changes: 4 additions & 5 deletions resolver/listen/listener.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ func (l *Listener) UpdateMessage(_ *agency.JobInfo, _ *agency.MessageUpdate) (er
return nil
}

func (l *Listener) AddCredential(info *agency.JobInfo, data *agency.Credential) (err error) {
func (l *Listener) AddCredential(info *agency.JobInfo, data *agency.Credential) (job *dbModel.Job, err error) {
defer err2.Handle(&err)

credential := try.To1(l.db.AddCredential(&dbModel.Credential{
Expand All @@ -108,16 +108,15 @@ func (l *Listener) AddCredential(info *agency.JobInfo, data *agency.Credential)
status = model.JobStatusPending
}

_ = try.To1(l.AddJob(&dbModel.Job{
return l.AddJob(&dbModel.Job{
Base: dbModel.Base{ID: info.JobID, TenantID: info.TenantID},
ConnectionID: &info.ConnectionID,
ProtocolType: model.ProtocolTypeCredential,
ProtocolCredentialID: &credential.ID,
InitiatedByUs: data.InitiatedByUs,
Status: status,
Result: model.JobResultNone,
}, credential.Description()))
return nil
}, credential.Description())
}

func (l *Listener) UpdateCredential(
Expand All @@ -132,7 +131,7 @@ func (l *Listener) UpdateCredential(
if credentialInput != nil && store.ErrorCode(err) == store.ErrCodeNotFound {
// we might have auto-accepting on in case we want to add the credential here
utils.LogHigh().Infof("Adding credential on update for tenant %s", info.TenantID)
try.To(l.AddCredential(info, credentialInput))
job = try.To1(l.AddCredential(info, credentialInput))
} else {
return err
}
Expand Down
113 changes: 111 additions & 2 deletions resolver/listen/listener_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ func TestAddCredential(t *testing.T) {

l := createListener(m)

_ = l.AddCredential(job, credential)
_, _ = l.AddCredential(job, credential)
}

func TestUpdateCredential(t *testing.T) {
Expand Down Expand Up @@ -271,6 +271,115 @@ func TestUpdateCredential(t *testing.T) {
_ = l.UpdateCredential(job, nil, credentialUpdate)
}

func TestUpdateNonExistentCredential(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()

m := NewMockDB(ctrl)
var (
now = utils.CurrentTimeMs()
job = &agency.JobInfo{JobID: "job-id", TenantID: "tenant-id", ConnectionID: "connection-id"}
credential = &agency.Credential{
Role: graph.CredentialRoleHolder,
SchemaID: "schema-id",
CredDefID: "cred-def-id",
Attributes: []*graph.CredentialValue{{
Name: "attribute-name",
Value: "attribute-value",
}},
InitiatedByUs: false,
}
resultCredential = &model.Credential{
Base: model.Base{TenantID: job.TenantID},
ConnectionID: job.ConnectionID,
Role: credential.Role,
SchemaID: credential.SchemaID,
CredDefID: credential.CredDefID,
Attributes: credential.Attributes,
InitiatedByUs: credential.InitiatedByUs,
}
resultJob = &model.Job{
Base: model.Base{ID: job.JobID, TenantID: job.TenantID},
ConnectionID: &job.ConnectionID,
ProtocolType: graph.ProtocolTypeCredential,
ProtocolCredentialID: &resultCredential.ID,
InitiatedByUs: credential.InitiatedByUs,
Status: graph.JobStatusPending,
Result: graph.JobResultNone,
}
event = &model.Event{
Base: model.Base{TenantID: job.TenantID},
Read: false,
Description: resultCredential.Description(),
ConnectionID: &job.ConnectionID,
JobID: &job.JobID,
}
credentialUpdate = &agency.CredentialUpdate{
ApprovedMs: &now,
}
updateResultCredential = &model.Credential{
Base: model.Base{TenantID: job.TenantID},
Role: graph.CredentialRoleHolder,
Approved: utils.TSToTimeIfNotSet(nil, credentialUpdate.ApprovedMs),
Issued: utils.TSToTimeIfNotSet(nil, &now),
}
updateResultJob = &model.Job{
Base: model.Base{ID: job.JobID, TenantID: job.TenantID},
ConnectionID: &job.ConnectionID,
ProtocolCredentialID: &resultCredential.ID,
}
updateEvent = &model.Event{
Base: model.Base{TenantID: job.TenantID},
Read: false,
Description: updateResultCredential.Description(),
ConnectionID: &job.ConnectionID,
JobID: &job.JobID,
}
)

// auto-accepted credentials do not have pre-created jobs
m.
EXPECT().
GetJob(gomock.Eq(job.JobID), gomock.Eq(job.TenantID)).
Return(nil, store.NewError(store.ErrCodeNotFound, "no rows returned"))
m.
EXPECT().
AddCredential(resultCredential).
Return(resultCredential, nil)
m.
EXPECT().
AddJob(resultJob).
Return(resultJob, nil)
m.
EXPECT().
AddEvent(event).
Return(event, nil)
m.
EXPECT().
GetCredential(gomock.Any(), gomock.Eq(job.TenantID)).
Return(updateResultCredential, nil)
m.
EXPECT().
UpdateCredential(updateResultCredential).
Return(updateResultCredential, nil)
m.
EXPECT().
UpdateJob(resultJob).
Return(updateResultJob, nil)
m.
EXPECT().
AddEvent(updateEvent).
Return(updateEvent, nil)
m.
EXPECT().
GetOpenProofJobs(job.TenantID, []*graph.ProofAttribute{})

l := createListener(m)

_ = l.UpdateCredential(job, credential, credentialUpdate)

}

func TestAddProof(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
Expand Down Expand Up @@ -465,7 +574,7 @@ func TestUpdateNonExistentProof(t *testing.T) {
}
)

// auto-accepted credentials do not have pre-created jobs
// auto-accepted proofs do not have pre-created jobs
m.
EXPECT().
GetJob(gomock.Eq(job.JobID), gomock.Eq(job.TenantID)).
Expand Down

0 comments on commit 7d7768e

Please sign in to comment.