Skip to content

Commit 68a7c46

Browse files
Merge pull request #164 from supertokens/userid-mapping
feat: Userid mapping
2 parents b169960 + 8e9ddb8 commit 68a7c46

15 files changed

+1887
-2
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1010

1111
### Added
1212
- Adds with-go-zero example: https://github.com/supertokens/supertokens-golang/issues/157
13+
- UserId Mapping functionality and compatibility with CDI 2.15
14+
- Adds `CreateUserIdMapping`, `GetUserIdMapping`, `DeleteUserIdMapping`, `UpdateOrDeleteUserIdMappingInfo` functions to supertokens package
15+
1316

1417
## [0.8.2] - 2022-07-18
1518

coreDriverInterfaceSupported.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"2.11",
88
"2.12",
99
"2.13",
10-
"2.14"
10+
"2.14",
11+
"2.15"
1112
]
1213
}
Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
package emailpassword
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
"github.com/supertokens/supertokens-golang/supertokens"
8+
"github.com/supertokens/supertokens-golang/test/unittesting"
9+
)
10+
11+
func TestCreateUserIdMappingGetUserById(t *testing.T) {
12+
BeforeEach()
13+
unittesting.StartUpST("localhost", "8080")
14+
defer AfterEach()
15+
16+
initForUserIdMappingTest(t)
17+
18+
querier, err := supertokens.GetNewQuerierInstanceOrThrowError("")
19+
assert.NoError(t, err)
20+
21+
cdiVersion, err := querier.GetQuerierAPIVersion()
22+
assert.NoError(t, err)
23+
24+
if unittesting.MaxVersion(cdiVersion, "2.14") != cdiVersion {
25+
return
26+
}
27+
28+
signUpResponse, err := SignUp("test@example.com", "testpass123")
29+
assert.NoError(t, err)
30+
31+
assert.NotNil(t, signUpResponse.OK)
32+
33+
externalUserId := "externalId"
34+
externalUserIdInfo := "externalIdInfo"
35+
createResp, err := supertokens.CreateUserIdMapping(signUpResponse.OK.User.ID, externalUserId, &externalUserIdInfo, nil)
36+
assert.NoError(t, err)
37+
assert.NotNil(t, createResp.OK)
38+
39+
{ // Using supertokens ID
40+
userResp, err := GetUserByID(signUpResponse.OK.User.ID)
41+
assert.NoError(t, err)
42+
assert.Equal(t, externalUserId, userResp.ID)
43+
}
44+
45+
{ // Using external ID
46+
userResp, err := GetUserByID(externalUserId)
47+
assert.NoError(t, err)
48+
assert.Equal(t, externalUserId, userResp.ID)
49+
}
50+
}
51+
52+
func TestCreateUserIdMappingGetUserByEmail(t *testing.T) {
53+
BeforeEach()
54+
unittesting.StartUpST("localhost", "8080")
55+
defer AfterEach()
56+
57+
initForUserIdMappingTest(t)
58+
59+
querier, err := supertokens.GetNewQuerierInstanceOrThrowError("")
60+
assert.NoError(t, err)
61+
62+
cdiVersion, err := querier.GetQuerierAPIVersion()
63+
assert.NoError(t, err)
64+
65+
if unittesting.MaxVersion(cdiVersion, "2.14") != cdiVersion {
66+
return
67+
}
68+
69+
signUpResponse, err := SignUp("test@example.com", "testpass123")
70+
assert.NoError(t, err)
71+
72+
assert.NotNil(t, signUpResponse.OK)
73+
74+
externalUserId := "externalId"
75+
externalUserIdInfo := "externalIdInfo"
76+
createResp, err := supertokens.CreateUserIdMapping(signUpResponse.OK.User.ID, externalUserId, &externalUserIdInfo, nil)
77+
assert.NoError(t, err)
78+
assert.NotNil(t, createResp.OK)
79+
80+
userResp, err := GetUserByEmail("test@example.com")
81+
assert.NoError(t, err)
82+
assert.Equal(t, externalUserId, userResp.ID)
83+
}
84+
85+
func TestCreateUserIdMappingSignIn(t *testing.T) {
86+
BeforeEach()
87+
unittesting.StartUpST("localhost", "8080")
88+
defer AfterEach()
89+
90+
initForUserIdMappingTest(t)
91+
92+
querier, err := supertokens.GetNewQuerierInstanceOrThrowError("")
93+
assert.NoError(t, err)
94+
95+
cdiVersion, err := querier.GetQuerierAPIVersion()
96+
assert.NoError(t, err)
97+
98+
if unittesting.MaxVersion(cdiVersion, "2.14") != cdiVersion {
99+
return
100+
}
101+
102+
signUpResponse, err := SignUp("test@example.com", "testpass123")
103+
assert.NoError(t, err)
104+
105+
assert.NotNil(t, signUpResponse.OK)
106+
107+
externalUserId := "externalId"
108+
externalUserIdInfo := "externalIdInfo"
109+
createResp, err := supertokens.CreateUserIdMapping(signUpResponse.OK.User.ID, externalUserId, &externalUserIdInfo, nil)
110+
assert.NoError(t, err)
111+
assert.NotNil(t, createResp.OK)
112+
113+
signInResp, err := SignIn("test@example.com", "testpass123")
114+
assert.NoError(t, err)
115+
assert.NotNil(t, signInResp.OK)
116+
assert.Equal(t, externalUserId, signInResp.OK.User.ID)
117+
}
118+
119+
func TestCreateUserIdMappingPasswordReset(t *testing.T) {
120+
BeforeEach()
121+
unittesting.StartUpST("localhost", "8080")
122+
defer AfterEach()
123+
124+
initForUserIdMappingTest(t)
125+
126+
querier, err := supertokens.GetNewQuerierInstanceOrThrowError("")
127+
assert.NoError(t, err)
128+
129+
cdiVersion, err := querier.GetQuerierAPIVersion()
130+
assert.NoError(t, err)
131+
132+
if unittesting.MaxVersion(cdiVersion, "2.14") != cdiVersion {
133+
return
134+
}
135+
136+
signUpResponse, err := SignUp("test@example.com", "testpass123")
137+
assert.NoError(t, err)
138+
139+
assert.NotNil(t, signUpResponse.OK)
140+
141+
externalUserId := "externalId"
142+
externalUserIdInfo := "externalIdInfo"
143+
createResp, err := supertokens.CreateUserIdMapping(signUpResponse.OK.User.ID, externalUserId, &externalUserIdInfo, nil)
144+
assert.NoError(t, err)
145+
assert.NotNil(t, createResp.OK)
146+
147+
prTokenResp, err := CreateResetPasswordToken(externalUserId)
148+
assert.NoError(t, err)
149+
assert.NotNil(t, prTokenResp.OK)
150+
151+
prResp, err := ResetPasswordUsingToken(prTokenResp.OK.Token, "newpass123")
152+
assert.NoError(t, err)
153+
assert.NotNil(t, prResp.OK)
154+
155+
signInResp, err := SignIn("test@example.com", "newpass123")
156+
assert.NoError(t, err)
157+
assert.NotNil(t, signInResp.OK)
158+
assert.Equal(t, externalUserId, signInResp.OK.User.ID)
159+
}
160+
161+
func TestCreateUserIdMappingUpdateEmailPassword(t *testing.T) {
162+
BeforeEach()
163+
unittesting.StartUpST("localhost", "8080")
164+
defer AfterEach()
165+
166+
initForUserIdMappingTest(t)
167+
168+
querier, err := supertokens.GetNewQuerierInstanceOrThrowError("")
169+
assert.NoError(t, err)
170+
171+
cdiVersion, err := querier.GetQuerierAPIVersion()
172+
assert.NoError(t, err)
173+
174+
if unittesting.MaxVersion(cdiVersion, "2.14") != cdiVersion {
175+
return
176+
}
177+
178+
signUpResponse, err := SignUp("test@example.com", "testpass123")
179+
assert.NoError(t, err)
180+
181+
assert.NotNil(t, signUpResponse.OK)
182+
183+
externalUserId := "externalId"
184+
externalUserIdInfo := "externalIdInfo"
185+
createResp, err := supertokens.CreateUserIdMapping(signUpResponse.OK.User.ID, externalUserId, &externalUserIdInfo, nil)
186+
assert.NoError(t, err)
187+
assert.NotNil(t, createResp.OK)
188+
189+
newEmail := "email@example.com"
190+
newPass := "newpass123"
191+
updateResp, err := UpdateEmailOrPassword(externalUserId, &newEmail, &newPass)
192+
assert.NoError(t, err)
193+
assert.NotNil(t, updateResp.OK)
194+
195+
signInResp, err := SignIn(newEmail, newPass)
196+
assert.NoError(t, err)
197+
assert.NotNil(t, signInResp.OK)
198+
assert.Equal(t, externalUserId, signInResp.OK.User.ID)
199+
}

recipe/emailpassword/testingUtils.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/stretchr/testify/assert"
2424
"github.com/supertokens/supertokens-golang/recipe/emailverification"
2525
"github.com/supertokens/supertokens-golang/recipe/session"
26+
"github.com/supertokens/supertokens-golang/recipe/usermetadata"
2627
"github.com/supertokens/supertokens-golang/supertokens"
2728
"github.com/supertokens/supertokens-golang/test/unittesting"
2829
)
@@ -32,6 +33,7 @@ func resetAll() {
3233
ResetForTest()
3334
emailverification.ResetForTest()
3435
session.ResetForTest()
36+
usermetadata.ResetForTest()
3537
}
3638

3739
func BeforeEach() {

0 commit comments

Comments
 (0)