tethys.backend/tests/functional/dataset_controller.spec.ts
Arno Kaimbacher bf9d25ae3e - advanced AsideMenuList.vue, AsideMenuItem.vue
- npm updates
- load menu in AsideMenu.vue via main.ts store for saving the satus of menu items
- extended jappa tests: test also permission on dataset controller code
2023-11-29 16:52:41 +01:00

100 lines
4.4 KiB
TypeScript

import { test } from '@japa/runner';
import supertest from 'supertest';
import Database from '@ioc:Adonis/Lucid/Database';
import Dataset from 'App/Models/Dataset';
import server from '@ioc:Adonis/Core/Server'; // Import the server instance
import User from 'App/Models/User';
import Role from 'App/Models/Role';
import Permission from 'App/Models/Permission';
test.group('DatasetController', (group) => {
// Write your test here
// beforeEach(async () => {
// await Database.beginGlobalTransaction();
// });
// In the following example, we start a global transaction before all the tests and roll back it after the tests.
group.each.setup(async () => {
await Database.beginGlobalTransaction();
return () => Database.rollbackGlobalTransaction();
});
test('should render dataset release page', async ({ assert }) => {
// var agent = supertest(server.instance);
// const user = await loginUser(agent);
const user = await User.create({
login: 'test',
email: 'alice@email.com',
password: 'password',
});
const role = await Role.create({
name: 'administrator',
display_name: 'admin',
description: 'User has access to all system functionality'
});
await user.related('roles').attach([role.id]);
const permission = await Permission.create({
name: 'dataset-edit',
display_name: 'edit dataset',
description: 'allow role to edit datasets'
});
await role.related('permissions').attach([permission.id]);
const dataset = new Dataset();
dataset.type = 'analysisdata';
dataset.creating_corporation = 'Tethys RDR';
dataset.language = 'de';
dataset.server_state = 'inprogress'; // Set the desired server state here
// await dataset.save();
await user.related('datasets').save(dataset);
// Perform the login request to establish the session
const loginResponse = await supertest(server.instance)
.post('/app/login')
// .field('email', user.email)
// .field('password', user.password)
// .set('Content-Type', 'application/x-www-form-urlencoded')
.send({ email: user.email, password: 'password' })
.set('Content-Type', 'application/json')
.expect(302); // Assuming the login endpoint redirects, if succesful
// Extract the session cookies from the login response
assert.exists(loginResponse.headers['set-cookie']);
const cookie = loginResponse.headers['set-cookie'];
// const response = await supertest(server.instance).get(`/submitter/dataset/${dataset.id}/release`).expect(302); //302 if authenticated, else 200
const response = await supertest(server.instance)
.get(`/submitter/dataset/${dataset.id}/release`)
.set('Cookie', cookie)
.set('X-Requested-With', 'XMLHttpRequest') // Set the X-Requested-With header to mimic an AJAX request
.set('X-Inertia', 'true')
// .set('X-Inertia-Version', '97c0899ca6e04e77a69f1ad5320e4ebe')
.set('Accept', 'text/html, application/xhtml+xml')
.set('Accept-Encoding', 'gzip, deflate, br')
.set('Connection', 'keep-alive')
.set(
'User-Agent',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
)
// .set('Host', 'localhost:4001')
// .set('Referer', 'http://localhost:3333/submitter/dataset')
// .set('Authorization', `Bearer ${authToken}`) // Set the Authorization header with the authentication token .
.expect(200);
// assert.equal(response.statusCode, 302);
// Add more assertions based on the expected behavior
// assert.equal(response.header('X-Inertia'), 'true');
// assert.equal(response.header('Content-Type'), 'application/json');
assert.equal(response.headers['x-inertia'], 'true');
assert.equal(response.headers['content-type'], 'application/json; charset=utf-8');
const responseData = response.body as { component: string; props: { dataset: any }; url: string };
// assert.equal(responseData.component, 'DatasetReleasePage');
assert.equal(responseData.props.dataset.id, dataset.id);
});
});