Skip to content

Commit ff6ddd2

Browse files
committed
wip: remove required, clarified handleAuthData
1 parent a55e4c8 commit ff6ddd2

File tree

6 files changed

+236
-192
lines changed

6 files changed

+236
-192
lines changed

spec/AuthenticationAdapters.spec.js

Lines changed: 129 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1750,10 +1750,9 @@ describe('microsoft graph auth adapter', () => {
17501750
});
17511751

17521752
describe('Auth Adapter features', () => {
1753-
const requiredAdapter = {
1753+
const baseAdapter = {
17541754
validateAppId: () => Promise.resolve(),
17551755
validateAuthData: () => Promise.resolve(),
1756-
required: true,
17571756
};
17581757
const alwaysValidateAdapter = {
17591758
validateAppId: () => Promise.resolve(),
@@ -1789,6 +1788,13 @@ describe('Auth Adapter features', () => {
17891788
},
17901789
};
17911790

1791+
/* const modernAdapter = {
1792+
validateAppId: () => Promise.resolve(),
1793+
validateSetUp: () => Promise.resolve(),
1794+
validateUpdate: () => Promise.resolve(),
1795+
validateLogin: () => Promise.resolve(),
1796+
}; */
1797+
17921798
const headers = {
17931799
'Content-Type': 'application/json',
17941800
'X-Parse-Application-Id': 'test',
@@ -1839,83 +1845,39 @@ describe('Auth Adapter features', () => {
18391845
expect(secondCall[3] instanceof Parse.User).toBeTruthy();
18401846
expect(secondCall[3].id).toEqual(user.id);
18411847
});
1842-
it('should require authData on username/password signup', async () => {
1843-
spyOn(requiredAdapter, 'validateAuthData').and.resolveTo({});
1844-
await reconfigureServer({ auth: { requiredAdapter } });
1845-
1846-
const user = new Parse.User();
1847-
1848-
try {
1849-
await user.save({ username: 'test', password: 'test' });
1850-
fail('should not save the user');
1851-
} catch (e) {
1852-
expect(e.message).toContain('Missing required authData requiredAdapter');
1853-
expect(user.getSessionToken()).toBeUndefined();
1854-
}
1855-
1856-
const payload = { someData: true };
1857-
1858-
await user.save({
1859-
username: 'test',
1860-
password: 'test',
1861-
authData: { requiredAdapter: payload },
1862-
});
1863-
1864-
expect(requiredAdapter.validateAuthData.calls.argsFor(0)[0]).toEqual(payload);
1865-
1866-
expect(user.getSessionToken()).toBeDefined();
1867-
});
1868-
it('should require authData on login with', async () => {
1869-
spyOn(requiredAdapter, 'validateAuthData').and.resolveTo({});
1870-
await reconfigureServer({ auth: { requiredAdapter } });
1871-
1872-
const user = new Parse.User();
1873-
1874-
try {
1875-
await user.save({ authData: { alwaysValidateAdapter: { id: 'shouldRequireAdapter' } } });
1876-
fail('should not save the user');
1877-
} catch (e) {
1878-
expect(e.message).toContain('Missing required authData requiredAdapter');
1879-
expect(user.getSessionToken()).toBeUndefined();
1880-
}
1881-
1882-
const payload = { someData: true, id: 'requiredAdapter' };
18831848

1884-
await user.save({
1885-
authData: { requiredAdapter: payload },
1886-
});
1887-
1888-
expect(requiredAdapter.validateAuthData.calls.argsFor(0)[0]).toEqual(payload);
1889-
expect(user.getSessionToken()).toBeDefined();
1890-
});
1849+
xit('should trigger correctly validateSetUp');
1850+
xit('should trigger correctly validateLogin');
1851+
xit('should trigger correctly validateUpdate');
1852+
xit('should throw if no triggers found');
18911853
it('should not update authData if provider return doNotSave', async () => {
18921854
spyOn(doNotSaveAdapter, 'validateAuthData').and.resolveTo({ doNotSave: true });
18931855
await reconfigureServer({
1894-
auth: { doNotSaveAdapter, requiredAdapter },
1856+
auth: { doNotSaveAdapter, baseAdapter },
18951857
});
18961858

18971859
const user = new Parse.User();
18981860

18991861
await user.save({
1900-
authData: { requiredAdapter: { id: 'requiredAdapter' }, doNotSaveAdapter: { token: true } },
1862+
authData: { baseAdapter: { id: 'baseAdapter' }, doNotSaveAdapter: { token: true } },
19011863
});
19021864

19031865
await user.fetch({ useMasterKey: true });
19041866

1905-
expect(user.get('authData')).toEqual({ requiredAdapter: { id: 'requiredAdapter' } });
1867+
expect(user.get('authData')).toEqual({ baseAdapter: { id: 'baseAdapter' } });
19061868
});
19071869
it('should force authData validation if provider use alwaysValidate', async () => {
19081870
spyOn(alwaysValidateAdapter, 'validateAuthData').and.resolveTo({});
1909-
spyOn(requiredAdapter, 'validateAuthData').and.resolveTo({});
1871+
spyOn(baseAdapter, 'validateAuthData').and.resolveTo({});
19101872
await reconfigureServer({
1911-
auth: { alwaysValidateAdapter, requiredAdapter },
1873+
auth: { alwaysValidateAdapter, baseAdapter },
19121874
});
19131875

19141876
const user = new Parse.User();
19151877

19161878
await user.save({
19171879
authData: {
1918-
requiredAdapter: { id: 'requiredAdapter' },
1880+
baseAdapter: { id: 'baseAdapter' },
19191881
alwaysValidateAdapter: { token: true },
19201882
},
19211883
});
@@ -1925,7 +1887,7 @@ describe('Auth Adapter features', () => {
19251887
const user2 = new Parse.User();
19261888
await user2.save({
19271889
authData: {
1928-
requiredAdapter: { id: 'requiredAdapter' },
1890+
baseAdapter: { id: 'baseAdapter' },
19291891
},
19301892
});
19311893

@@ -1934,7 +1896,7 @@ describe('Auth Adapter features', () => {
19341896
const user3 = new Parse.User();
19351897
await user3.save({
19361898
authData: {
1937-
requiredAdapter: { id: 'requiredAdapter' },
1899+
baseAdapter: { id: 'baseAdapter' },
19381900
alwaysValidateAdapter: { token: true },
19391901
},
19401902
});
@@ -1943,14 +1905,14 @@ describe('Auth Adapter features', () => {
19431905
});
19441906
it('should require additional provider if configured', async () => {
19451907
await reconfigureServer({
1946-
auth: { requiredAdapter, additionalAdapter },
1908+
auth: { baseAdapter, additionalAdapter },
19471909
});
19481910

19491911
const user = new Parse.User();
19501912

19511913
await user.save({
19521914
authData: {
1953-
requiredAdapter: { id: 'requiredAdapter' },
1915+
baseAdapter: { id: 'baseAdapter' },
19541916
additionalAdapter: { token: true },
19551917
},
19561918
});
@@ -1959,7 +1921,7 @@ describe('Auth Adapter features', () => {
19591921
try {
19601922
await user2.save({
19611923
authData: {
1962-
requiredAdapter: { id: 'requiredAdapter' },
1924+
baseAdapter: { id: 'baseAdapter' },
19631925
},
19641926
});
19651927
fail('should require additional authData');
@@ -1970,7 +1932,7 @@ describe('Auth Adapter features', () => {
19701932

19711933
await user2.save({
19721934
authData: {
1973-
requiredAdapter: { id: 'requiredAdapter' },
1935+
baseAdapter: { id: 'baseAdapter' },
19741936
additionalAdapter: { token: true },
19751937
},
19761938
});
@@ -2000,35 +1962,35 @@ describe('Auth Adapter features', () => {
20001962
expect(user2.getSessionToken()).toBeDefined();
20011963
});
20021964
it('should return authData response and save some info on non username login', async () => {
2003-
spyOn(requiredAdapter, 'validateAuthData').and.resolveTo({
1965+
spyOn(baseAdapter, 'validateAuthData').and.resolveTo({
20041966
response: { someData: true },
20051967
});
20061968
spyOn(alwaysValidateAdapter, 'validateAuthData').and.resolveTo({
20071969
response: { someData2: true },
20081970
save: { otherData: true },
20091971
});
20101972
await reconfigureServer({
2011-
auth: { requiredAdapter, alwaysValidateAdapter },
1973+
auth: { baseAdapter, alwaysValidateAdapter },
20121974
});
20131975

20141976
const user = new Parse.User();
20151977

20161978
await user.save({
20171979
authData: {
2018-
requiredAdapter: { id: 'requiredAdapter' },
1980+
baseAdapter: { id: 'baseAdapter' },
20191981
alwaysValidateAdapter: { test: true },
20201982
},
20211983
});
20221984

20231985
expect(user.get('authDataResponse')).toEqual({
2024-
requiredAdapter: { someData: true },
1986+
baseAdapter: { someData: true },
20251987
alwaysValidateAdapter: { someData2: true },
20261988
});
20271989

20281990
const user2 = new Parse.User();
20291991
await user2.save({
20301992
authData: {
2031-
requiredAdapter: { id: 'requiredAdapter' },
1993+
baseAdapter: { id: 'baseAdapter' },
20321994
alwaysValidateAdapter: { test: true },
20331995
},
20341996
});
@@ -2039,21 +2001,20 @@ describe('Auth Adapter features', () => {
20392001
userViaMasterKey.id = user2.id;
20402002
await userViaMasterKey.fetch({ useMasterKey: true });
20412003
expect(userViaMasterKey.get('authData')).toEqual({
2042-
requiredAdapter: { id: 'requiredAdapter' },
2004+
baseAdapter: { id: 'baseAdapter' },
20432005
alwaysValidateAdapter: { otherData: true },
20442006
});
20452007
});
2046-
20472008
it('should return authData response and save some info on username login', async () => {
2048-
spyOn(requiredAdapter, 'validateAuthData').and.resolveTo({
2009+
spyOn(baseAdapter, 'validateAuthData').and.resolveTo({
20492010
response: { someData: true },
20502011
});
20512012
spyOn(alwaysValidateAdapter, 'validateAuthData').and.resolveTo({
20522013
response: { someData2: true },
20532014
save: { otherData: true },
20542015
});
20552016
await reconfigureServer({
2056-
auth: { requiredAdapter, alwaysValidateAdapter },
2017+
auth: { baseAdapter, alwaysValidateAdapter },
20572018
});
20582019

20592020
const user = new Parse.User();
@@ -2062,13 +2023,13 @@ describe('Auth Adapter features', () => {
20622023
username: 'username',
20632024
password: 'password',
20642025
authData: {
2065-
requiredAdapter: { id: 'requiredAdapter' },
2026+
baseAdapter: { id: 'baseAdapter' },
20662027
alwaysValidateAdapter: { test: true },
20672028
},
20682029
});
20692030

20702031
expect(user.get('authDataResponse')).toEqual({
2071-
requiredAdapter: { someData: true },
2032+
baseAdapter: { someData: true },
20722033
alwaysValidateAdapter: { someData2: true },
20732034
});
20742035

@@ -2081,23 +2042,111 @@ describe('Auth Adapter features', () => {
20812042
password: 'password',
20822043
authData: {
20832044
alwaysValidateAdapter: { test: true },
2084-
requiredAdapter: { id: 'requiredAdapter' },
2045+
baseAdapter: { id: 'baseAdapter' },
20852046
},
20862047
}),
20872048
});
2088-
expect(JSON.parse(res.text).authDataResponse).toEqual({
2049+
const result = JSON.parse(res.text);
2050+
expect(result.authDataResponse).toEqual({
20892051
alwaysValidateAdapter: { someData2: true },
2052+
baseAdapter: { someData: true },
20902053
});
20912054

2092-
const userViaMasterKey = new Parse.User();
2093-
userViaMasterKey.id = user.id;
2094-
await userViaMasterKey.fetch({ useMasterKey: true });
2095-
expect(userViaMasterKey.get('authData')).toEqual({
2096-
requiredAdapter: { id: 'requiredAdapter' },
2055+
await user.fetch({ useMasterKey: true });
2056+
expect(user.get('authData')).toEqual({
2057+
baseAdapter: { id: 'baseAdapter' },
20972058
alwaysValidateAdapter: { otherData: true },
20982059
});
20992060
});
2061+
it('should allow update of authData', async () => {
2062+
spyOn(baseAdapter, 'validateAuthData').and.resolveTo({
2063+
response: { someData: true },
2064+
});
2065+
spyOn(alwaysValidateAdapter, 'validateAuthData').and.resolveTo({
2066+
response: { someData2: true },
2067+
save: { otherData: true },
2068+
});
2069+
await reconfigureServer({
2070+
auth: { baseAdapter, alwaysValidateAdapter },
2071+
});
2072+
await reconfigureServer({
2073+
auth: { baseAdapter, alwaysValidateAdapter },
2074+
});
2075+
2076+
const user = new Parse.User();
21002077

2078+
await user.save({
2079+
username: 'username',
2080+
password: 'password',
2081+
authData: {
2082+
baseAdapter: { id: 'baseAdapter' },
2083+
alwaysValidateAdapter: { test: true },
2084+
},
2085+
});
2086+
expect(baseAdapter.validateAuthData).toHaveBeenCalledTimes(1);
2087+
2088+
expect(user.id).toBeDefined();
2089+
expect(user.getSessionToken()).toBeDefined();
2090+
// Should not re validate the baseAdapter
2091+
// when user is already logged in and authData not changed
2092+
await user.save(
2093+
{
2094+
authData: {
2095+
alwaysValidateAdapter: { test: true },
2096+
baseAdapter: { id: 'baseAdapter' },
2097+
},
2098+
},
2099+
{ sessionToken: user.getSessionToken() }
2100+
);
2101+
2102+
expect(baseAdapter.validateAuthData).toHaveBeenCalledTimes(1);
2103+
2104+
// Should not re validate the baseAdapter
2105+
// when master key used and authData are not changed
2106+
await user.save(
2107+
{
2108+
authData: {
2109+
alwaysValidateAdapter: { test: true },
2110+
baseAdapter: { id: 'baseAdapter' },
2111+
},
2112+
},
2113+
{ useMasterKey: true }
2114+
);
2115+
2116+
expect(baseAdapter.validateAuthData).toHaveBeenCalledTimes(1);
2117+
2118+
// Should allow user to change authData
2119+
await user.save(
2120+
{
2121+
authData: {
2122+
alwaysValidateAdapter: { test: true },
2123+
baseAdapter: { id: 'baseAdapter2' },
2124+
},
2125+
},
2126+
{ sessionToken: user.getSessionToken() }
2127+
);
2128+
2129+
expect(baseAdapter.validateAuthData).toHaveBeenCalledTimes(2);
2130+
2131+
// Should allow master key to change authData
2132+
await user.save(
2133+
{
2134+
authData: {
2135+
alwaysValidateAdapter: { test: true },
2136+
baseAdapter: { id: 'baseAdapter3' },
2137+
},
2138+
},
2139+
{ useMasterKey: true }
2140+
);
2141+
2142+
expect(baseAdapter.validateAuthData).toHaveBeenCalledTimes(3);
2143+
2144+
await user.fetch({ useMasterKey: true });
2145+
expect(user.get('authData')).toEqual({
2146+
baseAdapter: { id: 'baseAdapter3' },
2147+
alwaysValidateAdapter: { otherData: true },
2148+
});
2149+
});
21012150
it('should pass user to auth adapter on update by matching session', async () => {
21022151
spyOn(alwaysValidateAdapter, 'validateAuthData').and.resolveTo({});
21032152
await reconfigureServer({ auth: { alwaysValidateAdapter } });
@@ -2138,7 +2187,6 @@ describe('Auth Adapter features', () => {
21382187
expect(secondCall[3] instanceof Parse.User).toBeTruthy();
21392188
expect(secondCall[3].id).toEqual(user.id);
21402189
});
2141-
21422190
it('should return challenge with no logged user', async () => {
21432191
spyOn(challengeAdapter, 'challenge').and.resolveTo({ token: 'test' });
21442192

0 commit comments

Comments
 (0)