-
Notifications
You must be signed in to change notification settings - Fork 293
/
Copy pathlogin.spec.ts
97 lines (89 loc) · 2.98 KB
/
login.spec.ts
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
import { PHP, PHPRequest } from '@php-wasm/universal';
import { RecommendedPHPVersion } from '@wp-playground/common';
import {
getSqliteDatabaseModule,
getWordPressModule,
} from '@wp-playground/wordpress-builds';
import { login } from './login';
import { PHPRequestHandler, HttpCookieStore } from '@php-wasm/universal';
import { bootWordPress } from '@wp-playground/wordpress';
import { loadNodeRuntime } from '@php-wasm/node';
import { defineWpConfigConsts } from './define-wp-config-consts';
import { joinPaths, phpVar } from '@php-wasm/util';
describe('Blueprint step login', () => {
let php: PHP;
let handler: PHPRequestHandler;
let cookieStore: HttpCookieStore;
beforeEach(async () => {
handler = await bootWordPress({
createPhpRuntime: async () =>
await loadNodeRuntime(RecommendedPHPVersion),
siteUrl: 'http://playground-domain/',
wordPressZip: await getWordPressModule(),
sqliteIntegrationPluginZip: await getSqliteDatabaseModule(),
});
cookieStore = new HttpCookieStore();
php = await handler.getPrimaryPhp();
});
const requestFollowRedirectsWithCookies = async (request: PHPRequest) => {
let response = await handler.request(request);
while (response.httpStatusCode === 302) {
cookieStore.rememberCookiesFromResponseHeaders(response.headers);
const cookieHeader = cookieStore.getCookieRequestHeader();
response = await handler.request({
url: response.headers['location'][0],
headers: {
...(cookieHeader && { cookie: cookieHeader }),
},
});
}
return response;
};
it('should log the user in', async () => {
await login(php, {});
const response = await requestFollowRedirectsWithCookies({
url: '/',
});
expect(response.httpStatusCode).toBe(200);
expect(response.text).toContain('Edit site');
});
it('should log the user into wp-admin', async () => {
await login(php, {});
const response = await requestFollowRedirectsWithCookies({
url: '/wp-admin/',
});
expect(response.httpStatusCode).toBe(200);
expect(response.text).toContain('Dashboard');
});
it('should log the user in if the playground_force_auto_login_as_user query parameter is set', async () => {
await defineWpConfigConsts(php, {
consts: {
PLAYGROUND_FORCE_AUTO_LOGIN_ENABLED: true,
},
});
const response = await requestFollowRedirectsWithCookies({
url: '/?playground_force_auto_login_as_user=admin',
});
expect(response.httpStatusCode).toBe(200);
expect(response.text).toContain('Dashboard');
});
it('should set WordPress login cookie after login', async () => {
await login(php, {});
await php.writeFile(
'/wordpress/nonce-test.php',
`<?php
require_once ${phpVar(joinPaths(handler.documentRoot, 'wp-load.php'))};
if (!empty($_COOKIE) && array_filter(array_keys($_COOKIE), function($key) {
return strpos($key, 'wordpress_logged_in_') === 0;
})
) {
echo '1';
}
`
);
const response = await requestFollowRedirectsWithCookies({
url: '/nonce-test.php',
});
expect(response.text).toBe('1');
});
});