-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathidentifier_complete_test.go
More file actions
150 lines (125 loc) · 4.5 KB
/
identifier_complete_test.go
File metadata and controls
150 lines (125 loc) · 4.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//go:build integration
package identifier
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
"github.com/corbado/corbado-go/v2/pkg/generated/api"
"github.com/corbado/corbado-go/v2/tests/integration"
)
func TestIdentifierOperations(t *testing.T) {
ctx := context.TODO()
userID := integration.CreateUser(t)
email := integration.CreateRandomTestEmail(t)
initialIdentifier := &api.Identifier{}
t.Run("CreateIdentifier", func(t *testing.T) {
t.Run("ValidationError", func(t *testing.T) {
identifier, err := integration.SDK(t).Identifiers().Create(ctx, userID, api.IdentifierCreateReq{
IdentifierValue: "",
IdentifierType: "email",
Status: "verified",
})
assert.Error(t, err)
assert.Nil(t, identifier)
})
t.Run("Success", func(t *testing.T) {
identifier, err := integration.SDK(t).Identifiers().Create(ctx, userID, api.IdentifierCreateReq{
IdentifierValue: email,
IdentifierType: "email",
Status: "verified",
})
assert.NoError(t, err)
assert.NotNil(t, identifier)
assert.Equal(t, identifier.Value, email)
assert.Equal(t, identifier.Status, api.IdentifierStatus("verified"))
assert.Equal(t, identifier.UserID, userID)
initialIdentifier = identifier
})
})
t.Run("ListIdentifiers", func(t *testing.T) {
t.Run("All", func(t *testing.T) {
// Create new identifier
newIdentifier := integration.CreateIdentifier(t)
var allIdentifiers []api.Identifier
page := 1
pageSize := 100
hasNextPage := true
for hasNextPage {
// List identifiers for the current page
list, err := integration.SDK(t).Identifiers().List(ctx, []string{}, "", page, pageSize)
assert.NoError(t, err)
assert.NotNil(t, list)
// Append identifiers to the complete list
allIdentifiers = append(allIdentifiers, list.Identifiers...)
// Check if there's a next page
if list.Paging.TotalPages <= page {
hasNextPage = false
} else {
page++
}
}
// Search for the new identifier in the list
found := false
for _, identifier := range allIdentifiers {
if identifier.IdentifierID == newIdentifier {
found = true
break
}
}
assert.True(t, found, "New identifier should be found in the list")
})
t.Run("ByValueAndType", func(t *testing.T) {
list, err := integration.SDK(t).Identifiers().ListByValueAndType(ctx, email, "email", "", 1, 100)
assert.NoError(t, err)
assert.NotNil(t, list)
assert.Len(t, list.Identifiers, 1)
assert.Equal(t, list.Identifiers[0].Value, email)
})
t.Run("ByUserIDAndType", func(t *testing.T) {
list, err := integration.SDK(t).Identifiers().ListByUserIDAndType(ctx, userID, "email", "", 1, 100)
assert.NoError(t, err)
assert.NotNil(t, list)
assert.Len(t, list.Identifiers, 1)
assert.Equal(t, list.Identifiers[0].Value, email)
})
t.Run("ByUserID", func(t *testing.T) {
list, err := integration.SDK(t).Identifiers().ListByUserID(ctx, userID, "", 1, 100)
assert.NoError(t, err)
assert.NotNil(t, list)
assert.Len(t, list.Identifiers, 1)
assert.Equal(t, list.Identifiers[0].Value, email)
})
})
t.Run("UpdateIdentifier", func(t *testing.T) {
t.Run("Success", func(t *testing.T) {
// Update identifier status
identifier, err := integration.SDK(t).Identifiers().UpdateStatus(ctx, userID, initialIdentifier.IdentifierID, api.IdentifierStatusPending)
assert.NoError(t, err)
assert.NotNil(t, identifier)
// Verify the updated status
list, err := integration.SDK(t).Identifiers().ListByUserID(ctx, userID, "", 1, 100)
assert.NoError(t, err)
assert.Equal(t, list.Identifiers[0].Status, api.IdentifierStatusPending)
})
})
t.Run("DeleteIdentifier", func(t *testing.T) {
t.Run("Success", func(t *testing.T) {
// List identifiers before deletion
initialList, err := integration.SDK(t).Identifiers().ListByUserID(ctx, userID, "", 1, 100)
assert.NoError(t, err)
// Delete identifier
_, err = integration.SDK(t).Identifiers().Delete(ctx, userID, initialIdentifier.IdentifierID)
assert.NoError(t, err)
// List identifiers after deletion
finalList, err := integration.SDK(t).Identifiers().ListByUserID(ctx, userID, "", 1, 100)
assert.NoError(t, err)
assert.Equal(t, len(finalList.Identifiers), len(initialList.Identifiers)-1)
})
t.Run("NotFound", func(t *testing.T) {
// Attempt to delete a non-existent identifier
identifier, err := integration.SDK(t).Identifiers().Delete(ctx, userID, initialIdentifier.IdentifierID)
assert.Error(t, err)
assert.Nil(t, identifier)
})
})
}