summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.dockerignore1
-rw-r--r--.gitignore1
-rwxr-xr-xdocker/federation-test/run-tests.sh23
-rw-r--r--docker/federation/docker-compose.yml3
-rwxr-xr-xdocker/federation/run-federation-test.bash2
-rw-r--r--ui/src/api_tests/api.spec.ts122
6 files changed, 81 insertions, 71 deletions
diff --git a/.dockerignore b/.dockerignore
index 4f186bcd..255caf67 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -3,6 +3,7 @@ ui/node_modules
server/target
docker/dev/volumes
docker/federation/volumes
+docker/federation-test/volumes
.git
ansible
diff --git a/.gitignore b/.gitignore
index 5e9fd40d..236a729e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@ ansible/passwords/
docker/lemmy_mine.hjson
docker/dev/env_deploy.sh
docker/federation/volumes
+docker/federation-test/volumes
docker/dev/volumes
# local build files
diff --git a/docker/federation-test/run-tests.sh b/docker/federation-test/run-tests.sh
new file mode 100755
index 00000000..43e2f909
--- /dev/null
+++ b/docker/federation-test/run-tests.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+set -e
+
+pushd ../../server/
+cargo build
+popd
+
+sudo docker build ../../ --file ../federation/Dockerfile --tag lemmy-federation:latest
+
+sudo docker-compose --file ../federation/docker-compose.yml --project-directory . up -d
+
+# TODO: need to wait until the instances are initialised
+
+pushd ../../ui
+yarn
+echo "Waiting for Lemmy to start..."
+while [[ "$(curl -s -o /dev/null -w '%{http_code}' 'localhost:8540/api/v1/site')" != "200" ]]; do sleep 5; done
+yarn api-test || true
+popd
+
+sudo docker-compose --file ../federation/docker-compose.yml --project-directory . down
+
+sudo rm -r volumes/
diff --git a/docker/federation/docker-compose.yml b/docker/federation/docker-compose.yml
index 4f23cdcc..496e7fa6 100644
--- a/docker/federation/docker-compose.yml
+++ b/docker/federation/docker-compose.yml
@@ -7,7 +7,8 @@ services:
- "8540:8540"
- "8550:8550"
volumes:
- - ./nginx.conf:/etc/nginx/nginx.conf
+ # Hack to make this work from both docker/federation/ and docker/federation-test/
+ - ../federation/nginx.conf:/etc/nginx/nginx.conf
depends_on:
- lemmy_alpha
- pictshare_alpha
diff --git a/docker/federation/run-federation-test.bash b/docker/federation/run-federation-test.bash
index 2c8b681c..8486648b 100755
--- a/docker/federation/run-federation-test.bash
+++ b/docker/federation/run-federation-test.bash
@@ -12,6 +12,6 @@ pushd ../../server/ || exit
cargo build
popd || exit
-sudo docker build ../../ -f Dockerfile -t lemmy-federation:latest
+sudo docker build ../../ --file Dockerfile -t lemmy-federation:latest
sudo docker-compose up
diff --git a/ui/src/api_tests/api.spec.ts b/ui/src/api_tests/api.spec.ts
index 5db9ee64..07e12ecf 100644
--- a/ui/src/api_tests/api.spec.ts
+++ b/ui/src/api_tests/api.spec.ts
@@ -3,83 +3,67 @@ import fetch from 'node-fetch';
import {
LoginForm,
LoginResponse,
- GetPostsForm,
- GetPostsResponse,
- CommentForm,
- CommentResponse,
- ListingType,
- SortType,
+ PostForm,
+ PostResponse,
+ SearchResponse,
} from '../interfaces';
-let baseUrl = 'https://test.lemmy.ml';
-let apiUrl = `${baseUrl}/api/v1`;
-let auth: string;
+let lemmyAlphaUrl = 'http://localhost:8540';
+let lemmyBetaUrl = 'http://localhost:8550';
+let lemmyAlphaApiUrl = `${lemmyAlphaUrl}/api/v1`;
+let lemmyBetaApiUrl = `${lemmyBetaUrl}/api/v1`;
+let lemmyAlphaAuth: string;
-beforeAll(async () => {
- console.log('Logging in as test user.');
- let form: LoginForm = {
- username_or_email: 'tester',
- password: 'tester',
- };
+// Workaround for tests being run before beforeAll() is finished
+// https://github.com/facebook/jest/issues/9527#issuecomment-592406108
+describe('main', () => {
+ beforeAll(async () => {
+ console.log('Logging in as lemmy_alpha');
+ let form: LoginForm = {
+ username_or_email: 'lemmy_alpha',
+ password: 'lemmy',
+ };
- let res: LoginResponse = await fetch(`${apiUrl}/user/login`, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- body: wrapper(form),
- }).then(d => d.json());
+ let res: LoginResponse = await fetch(`${lemmyAlphaApiUrl}/user/login`, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: wrapper(form),
+ }).then(d => d.json());
- auth = res.jwt;
-});
-
-test('Get test user posts', async () => {
- let form: GetPostsForm = {
- type_: ListingType[ListingType.All],
- sort: SortType[SortType.TopAll],
- auth,
- };
+ lemmyAlphaAuth = res.jwt;
+ });
- let res: GetPostsResponse = await fetch(
- `${apiUrl}/post/list?type_=${form.type_}&sort=${form.sort}&auth=${auth}`
- ).then(d => d.json());
+ test('Create test post on alpha and fetch it on beta', async () => {
+ let name = 'A jest test post';
+ let postForm: PostForm = {
+ name,
+ auth: lemmyAlphaAuth,
+ community_id: 2,
+ creator_id: 2,
+ nsfw: false,
+ };
- // console.debug(res);
+ let createResponse: PostResponse = await fetch(`${lemmyAlphaApiUrl}/post`, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: wrapper(postForm),
+ }).then(d => d.json());
+ expect(createResponse.post.name).toBe(name);
- expect(res.posts[0].id).toBe(2);
-});
+ let searchUrl = `${lemmyBetaApiUrl}/search?q=${createResponse.post.ap_id}&type_=All&sort=TopAll`;
+ let searchResponse: SearchResponse = await fetch(searchUrl, {
+ method: 'GET',
+ }).then(d => d.json());
-test('Create test comment', async () => {
- let content = 'A jest test comment';
- let form: CommentForm = {
- post_id: 2,
- content,
- auth,
- };
+ // TODO: check more fields
+ expect(searchResponse.posts[0].name).toBe(name);
+ });
- let res: CommentResponse = await fetch(`${apiUrl}/comment`, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- body: wrapper(form),
- }).then(d => d.json());
-
- expect(res.comment.content).toBe(content);
+ function wrapper(form: any): string {
+ return JSON.stringify(form);
+ }
});
-
-test('adds 1 + 2 to equal 3', () => {
- let sum = (a: number, b: number) => a + b;
- expect(sum(1, 2)).toBe(3);
-});
-
-test(`Get ${baseUrl} nodeinfo href`, async () => {
- let url = `${baseUrl}/.well-known/nodeinfo`;
- let href = `${baseUrl}/nodeinfo/2.0.json`;
- let res = await fetch(url).then(d => d.json());
- expect(res.links.href).toBe(href);
-});
-
-function wrapper(form: any): string {
- return JSON.stringify(form);
-}