mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
Merge pull request #1060 from omnivore-app/fix/integrations-db-permissions
fix/integrations db permissions
This commit is contained in:
commit
27a14d5537
39 changed files with 222 additions and 178 deletions
16
.github/workflows/run-tests.yaml
vendored
16
.github/workflows/run-tests.yaml
vendored
|
|
@ -63,6 +63,18 @@ jobs:
|
|||
run: |
|
||||
source ~/.nvm/nvm.sh
|
||||
yarn install --frozen-lockfile
|
||||
- name: Database Migration
|
||||
run: |
|
||||
yarn workspace @omnivore/db migrate
|
||||
psql -h localhost -p ${{ job.services.postgres.ports[5432] }} -U postgres -c "CREATE USER app_user WITH ENCRYPTED PASSWORD 'app_pass';GRANT omnivore_user to app_user;"
|
||||
env:
|
||||
PG_HOST: localhost
|
||||
PG_PORT: ${{ job.services.postgres.ports[5432] }}
|
||||
PG_USER: postgres
|
||||
PG_PASSWORD: postgres
|
||||
PG_DB: omnivore_test
|
||||
ELASTIC_URL: http://localhost:${{ job.services.elastic.ports[9200] }}/
|
||||
PGPASSWORD: postgres # This is required for the psql command to work without a password prompt
|
||||
- name: TypeScript, Lint, Tests
|
||||
run: |
|
||||
source ~/.nvm/nvm.sh
|
||||
|
|
@ -72,8 +84,8 @@ jobs:
|
|||
env:
|
||||
PG_HOST: localhost
|
||||
PG_PORT: ${{ job.services.postgres.ports[5432] }}
|
||||
PG_USER: postgres
|
||||
PG_PASSWORD: postgres
|
||||
PG_USER: app_user
|
||||
PG_PASSWORD: app_pass
|
||||
PG_DB: omnivore_test
|
||||
PG_POOL_MAX: 10
|
||||
ELASTIC_URL: http://localhost:${{ job.services.elastic.ports[9200] }}/
|
||||
|
|
|
|||
|
|
@ -2,17 +2,21 @@ import {
|
|||
Column,
|
||||
CreateDateColumn,
|
||||
Entity,
|
||||
JoinColumn,
|
||||
ManyToOne,
|
||||
PrimaryGeneratedColumn,
|
||||
UpdateDateColumn,
|
||||
} from 'typeorm'
|
||||
import { User } from '../user'
|
||||
|
||||
@Entity()
|
||||
export class ContentDisplayReport {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id?: string
|
||||
|
||||
@Column('text')
|
||||
userId!: string
|
||||
@ManyToOne(() => User, { onDelete: 'CASCADE' })
|
||||
@JoinColumn({ name: 'user_id' })
|
||||
user!: User
|
||||
|
||||
@Column('text')
|
||||
pageId?: string
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ export class ContentDisplayReportSubscriber
|
|||
async afterInsert(event: InsertEvent<ContentDisplayReport>): Promise<void> {
|
||||
const report = event.entity
|
||||
const message = `A new content display report was created by:
|
||||
${report.userId} for URL: ${report.originalUrl}
|
||||
${report.user.id} for URL: ${report.originalUrl}
|
||||
${report.reportComment}`
|
||||
|
||||
console.log(message)
|
||||
|
|
|
|||
|
|
@ -9,10 +9,12 @@ import { UserDeviceToken } from '../src/entity/user_device_tokens'
|
|||
import { Label } from '../src/entity/label'
|
||||
import { Subscription } from '../src/entity/subscription'
|
||||
import { AppDataSource } from '../src/server'
|
||||
import { getRepository } from '../src/entity/utils'
|
||||
import { getRepository, setClaims } from '../src/entity/utils'
|
||||
import { createUser } from '../src/services/create_user'
|
||||
import { SnakeNamingStrategy } from 'typeorm-naming-strategies'
|
||||
import { SubscriptionStatus } from '../src/generated/graphql'
|
||||
import { Integration } from '../src/entity/integration'
|
||||
import { FindOptionsWhere } from 'typeorm'
|
||||
|
||||
const runMigrations = async () => {
|
||||
const migrationDirectory = __dirname + '/../../db/migrations'
|
||||
|
|
@ -42,7 +44,8 @@ const runMigrations = async () => {
|
|||
}
|
||||
|
||||
export const createTestConnection = async (): Promise<void> => {
|
||||
await runMigrations()
|
||||
// need to manually run migrations before creating the connection
|
||||
// await runMigrations()
|
||||
|
||||
AppDataSource.setOptions({
|
||||
type: 'postgres',
|
||||
|
|
@ -60,12 +63,11 @@ export const createTestConnection = async (): Promise<void> => {
|
|||
await AppDataSource.initialize()
|
||||
}
|
||||
|
||||
export const deleteTestUser = async (name: string) => {
|
||||
await AppDataSource.createQueryBuilder()
|
||||
.delete()
|
||||
.from(User)
|
||||
.where({ email: `${name}@omnivore.app` })
|
||||
.execute()
|
||||
export const deleteTestUser = async (userId: string) => {
|
||||
await AppDataSource.transaction(async (t) => {
|
||||
await setClaims(t, userId)
|
||||
await t.getRepository(User).delete(userId)
|
||||
})
|
||||
}
|
||||
|
||||
export const createTestUser = async (
|
||||
|
|
@ -202,3 +204,40 @@ export const createTestSubscription = async (
|
|||
status: SubscriptionStatus.Active,
|
||||
})
|
||||
}
|
||||
|
||||
export const deleteTestLabels = async (
|
||||
userId: string,
|
||||
criteria: string[] | FindOptionsWhere<Label>
|
||||
) => {
|
||||
await AppDataSource.transaction(async (t) => {
|
||||
await setClaims(t, userId)
|
||||
await t.getRepository(Label).delete(criteria)
|
||||
})
|
||||
}
|
||||
|
||||
export const deleteTestIntegrations = async (
|
||||
userId: string,
|
||||
criteria: string[] | FindOptionsWhere<Integration>
|
||||
) => {
|
||||
await AppDataSource.transaction(async (t) => {
|
||||
await setClaims(t, userId)
|
||||
await t.getRepository(Integration).delete(criteria)
|
||||
})
|
||||
}
|
||||
|
||||
export const updateTestUser = async (userId: string, update: Partial<User>) => {
|
||||
await AppDataSource.transaction(async (t) => {
|
||||
await setClaims(t, userId)
|
||||
await t.getRepository(User).update(userId, update)
|
||||
})
|
||||
}
|
||||
|
||||
export const deleteTestDeviceTokens = async (
|
||||
userId: string,
|
||||
criteria: string[] | FindOptionsWhere<UserDeviceToken>
|
||||
) => {
|
||||
await AppDataSource.transaction(async (t) => {
|
||||
await setClaims(t, userId)
|
||||
await t.getRepository(UserDeviceToken).delete(criteria)
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import { hashPassword } from '../../src/utils/auth'
|
|||
import 'mocha'
|
||||
|
||||
describe('Sanitize Directive', () => {
|
||||
const username = 'fake_user'
|
||||
const correctPassword = 'fakePassword'
|
||||
|
||||
let authToken: string
|
||||
|
|
@ -13,7 +12,7 @@ describe('Sanitize Directive', () => {
|
|||
|
||||
before(async () => {
|
||||
const hashedPassword = await hashPassword(correctPassword)
|
||||
user = await createTestUser(username, '', hashedPassword)
|
||||
user = await createTestUser('fake_user', '', hashedPassword)
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -22,7 +21,7 @@ describe('Sanitize Directive', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('Update user with a bio that is too long', () => {
|
||||
|
|
|
|||
|
|
@ -25,8 +25,6 @@ const testAPIKey = (apiKey: string): supertest.Test => {
|
|||
}
|
||||
|
||||
describe('Api Key resolver', () => {
|
||||
const username = 'fake_user'
|
||||
|
||||
let authToken: string
|
||||
let user: User
|
||||
let query: string
|
||||
|
|
@ -36,7 +34,7 @@ describe('Api Key resolver', () => {
|
|||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('fake_user')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -46,7 +44,7 @@ describe('Api Key resolver', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('generate api key', () => {
|
||||
|
|
|
|||
|
|
@ -343,14 +343,13 @@ const typeaheadSearchQuery = (keyword: string) => {
|
|||
}
|
||||
|
||||
describe('Article API', () => {
|
||||
const username = 'fakeUser'
|
||||
let authToken: string
|
||||
let user: User
|
||||
let ctx: PageContext
|
||||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -366,7 +365,7 @@ describe('Article API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('CreateArticle', () => {
|
||||
|
|
|
|||
|
|
@ -49,14 +49,13 @@ const createArticleSavingRequestMutation = (url: string) => `
|
|||
`
|
||||
|
||||
describe('ArticleSavingRequest API', () => {
|
||||
const username = 'fakeUser'
|
||||
let authToken: string
|
||||
let user: User
|
||||
let ctx: PageContext
|
||||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -72,7 +71,7 @@ describe('ArticleSavingRequest API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('createArticleSavingRequest', () => {
|
||||
|
|
|
|||
|
|
@ -102,7 +102,6 @@ const mergeHighlightQuery = (
|
|||
}
|
||||
|
||||
describe('Highlights API', () => {
|
||||
const username = 'fakeUser'
|
||||
let authToken: string
|
||||
let user: User
|
||||
let pageId: string
|
||||
|
|
@ -110,7 +109,7 @@ describe('Highlights API', () => {
|
|||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -121,7 +120,7 @@ describe('Highlights API', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
if (pageId) {
|
||||
await deletePage(pageId, ctx)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import 'mocha'
|
||||
import { User } from '../../src/entity/user'
|
||||
import { createTestUser, deleteTestUser } from '../db'
|
||||
import { createTestUser, deleteTestIntegrations, deleteTestUser } from '../db'
|
||||
import { generateFakeUuid, graphqlRequest, request } from '../util'
|
||||
import {
|
||||
IntegrationType,
|
||||
|
|
@ -30,7 +30,7 @@ describe('Integrations resolvers', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await deleteTestUser(loginUser.name)
|
||||
await deleteTestUser(loginUser.id)
|
||||
})
|
||||
|
||||
describe('setIntegration API', () => {
|
||||
|
|
@ -98,9 +98,7 @@ describe('Integrations resolvers', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await getRepository(Integration).delete({
|
||||
id: existingIntegration.id,
|
||||
})
|
||||
await deleteTestIntegrations(loginUser.id, [existingIntegration.id])
|
||||
})
|
||||
|
||||
it('returns AlreadyExists error code', async () => {
|
||||
|
|
@ -137,7 +135,7 @@ describe('Integrations resolvers', () => {
|
|||
})
|
||||
|
||||
afterEach(async () => {
|
||||
await getRepository(Integration).delete({
|
||||
await deleteTestIntegrations(loginUser.id, {
|
||||
user: { id: loginUser.id },
|
||||
type: integrationType,
|
||||
})
|
||||
|
|
@ -199,10 +197,8 @@ describe('Integrations resolvers', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await deleteTestUser(otherUser.name)
|
||||
await getRepository(Integration).delete({
|
||||
id: existingIntegration.id,
|
||||
})
|
||||
await deleteTestUser(otherUser.id)
|
||||
await deleteTestIntegrations(loginUser.id, [existingIntegration.id])
|
||||
})
|
||||
|
||||
it('returns Unauthorized error code', async () => {
|
||||
|
|
@ -227,9 +223,7 @@ describe('Integrations resolvers', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await getRepository(Integration).delete({
|
||||
id: existingIntegration.id,
|
||||
})
|
||||
await deleteTestIntegrations(loginUser.id, [existingIntegration.id])
|
||||
})
|
||||
|
||||
context('when enable is false', () => {
|
||||
|
|
@ -328,7 +322,7 @@ describe('Integrations resolvers', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await getRepository(Integration).delete(existingIntegration.id)
|
||||
await deleteTestIntegrations(loginUser.id, [existingIntegration.id])
|
||||
})
|
||||
|
||||
it('returns all integrations', async () => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
import { createTestLabel, createTestUser, deleteTestUser } from '../db'
|
||||
import {
|
||||
createTestLabel,
|
||||
createTestUser,
|
||||
deleteTestLabels,
|
||||
deleteTestUser,
|
||||
} from '../db'
|
||||
import {
|
||||
createTestElasticPage,
|
||||
generateFakeUuid,
|
||||
|
|
@ -40,7 +45,7 @@ describe('Labels API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(user.name)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('GET labels', () => {
|
||||
|
|
@ -56,7 +61,10 @@ describe('Labels API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await getRepository(Label).delete(labels.map((l) => l.id))
|
||||
await deleteTestLabels(
|
||||
user.id,
|
||||
labels.map((l) => l.id)
|
||||
)
|
||||
})
|
||||
|
||||
beforeEach(() => {
|
||||
|
|
@ -146,7 +154,7 @@ describe('Labels API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await getRepository(Label).delete({ name })
|
||||
await deleteTestLabels(user.id, { name })
|
||||
})
|
||||
|
||||
it('should create label', async () => {
|
||||
|
|
@ -167,7 +175,7 @@ describe('Labels API', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await getRepository(Label).delete(existingLabel.id)
|
||||
await deleteTestLabels(user.id, [existingLabel.id])
|
||||
})
|
||||
|
||||
it('should return error code LABEL_ALREADY_EXISTS', async () => {
|
||||
|
|
@ -341,7 +349,10 @@ describe('Labels API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await getRepository(Label).delete(labels.map((l) => l.id))
|
||||
await deleteTestLabels(
|
||||
user.id,
|
||||
labels.map((l) => l.id)
|
||||
)
|
||||
await deletePage(page.id, ctx)
|
||||
})
|
||||
|
||||
|
|
@ -465,7 +476,7 @@ describe('Labels API', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await getRepository(Label).delete(toUpdateLabel.id)
|
||||
await deleteTestLabels(user.id, [toUpdateLabel.id])
|
||||
})
|
||||
|
||||
it('should return the updated label', async () => {
|
||||
|
|
@ -541,7 +552,10 @@ describe('Labels API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await getRepository(Label).delete(labels.map((l) => l.id))
|
||||
await deleteTestLabels(
|
||||
user.id,
|
||||
labels.map((l) => l.id)
|
||||
)
|
||||
await deletePage(page.id, ctx)
|
||||
})
|
||||
|
||||
|
|
@ -669,7 +683,10 @@ describe('Labels API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await getRepository(Label).delete(labels.map((l) => l.id))
|
||||
await deleteTestLabels(
|
||||
user.id,
|
||||
labels.map((l) => l.id)
|
||||
)
|
||||
})
|
||||
|
||||
context('when label exists', () => {
|
||||
|
|
|
|||
|
|
@ -6,19 +6,19 @@ import {
|
|||
} from '../db'
|
||||
import { generateFakeUuid, graphqlRequest, request } from '../util'
|
||||
import { NewsletterEmail } from '../../src/entity/newsletter_email'
|
||||
import { User } from '../../src/entity/user'
|
||||
import { expect } from 'chai'
|
||||
import { DeleteNewsletterEmailErrorCode } from '../../src/generated/graphql'
|
||||
import 'mocha'
|
||||
|
||||
describe('Newsletters API', () => {
|
||||
const username = 'fakeUser'
|
||||
|
||||
let user: User
|
||||
let authToken: string
|
||||
let newsletterEmails: NewsletterEmail[]
|
||||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
const user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -39,7 +39,7 @@ describe('Newsletters API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('Get newsletter emails', () => {
|
||||
|
|
|
|||
|
|
@ -6,8 +6,6 @@ import { User } from '../../src/entity/user'
|
|||
import { getPageByParam } from '../../src/elastic/pages'
|
||||
|
||||
describe('PopularReads API', () => {
|
||||
const username = 'fakeUser'
|
||||
|
||||
let user: User
|
||||
let authToken: string
|
||||
|
||||
|
|
@ -28,7 +26,7 @@ describe('PopularReads API', () => {
|
|||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -38,7 +36,7 @@ describe('PopularReads API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('addPopularRead', () => {
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ describe('recent_searches resolver', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(user.name)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('recentSearches API', () => {
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import {
|
|||
} from '../db'
|
||||
import { expect } from 'chai'
|
||||
import { Reminder } from '../../src/entity/reminder'
|
||||
import { User } from '../../src/entity/user'
|
||||
import {
|
||||
CreateReminderErrorCode,
|
||||
ReminderErrorCode,
|
||||
|
|
@ -22,15 +23,14 @@ import 'mocha'
|
|||
import { Page } from '../../src/elastic/types'
|
||||
|
||||
describe('Reminders API', () => {
|
||||
const username = 'fakeUser'
|
||||
|
||||
let authToken: string
|
||||
let page: Page
|
||||
let reminder: Reminder
|
||||
let user: User
|
||||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
const user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -44,7 +44,7 @@ describe('Reminders API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('Get reminder', () => {
|
||||
|
|
|
|||
|
|
@ -8,15 +8,13 @@ import { expect } from 'chai'
|
|||
import { getRepository } from '../../src/entity/utils'
|
||||
|
||||
describe('Report API', () => {
|
||||
const username = 'fakeUser'
|
||||
|
||||
let user: User
|
||||
let authToken: string
|
||||
let page: Page
|
||||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -29,7 +27,7 @@ describe('Report API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('reportItem', () => {
|
||||
|
|
@ -60,12 +58,6 @@ describe('Report API', () => {
|
|||
reportTypes = [ReportType.ContentDisplay]
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
await getRepository(ContentDisplayReport).delete({
|
||||
elasticPageId: pageId,
|
||||
})
|
||||
})
|
||||
|
||||
it('should report an item', async () => {
|
||||
await graphqlRequest(query, authToken).expect(200)
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ describe('Rules Resolver', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('set rules', () => {
|
||||
|
|
|
|||
|
|
@ -1,18 +1,15 @@
|
|||
import {
|
||||
createTestUser,
|
||||
deleteTestUser,
|
||||
} from '../db'
|
||||
import { createTestUser, deleteTestUser } from '../db'
|
||||
import { graphqlRequest, request } from '../util'
|
||||
import 'mocha'
|
||||
import { User } from '../../src/entity/user'
|
||||
|
||||
describe('Send Install Instructions API', () => {
|
||||
const username = 'fakeUser'
|
||||
|
||||
let authToken: string
|
||||
let user: User
|
||||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
const user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -22,7 +19,7 @@ describe('Send Install Instructions API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('Send install instructions', () => {
|
||||
|
|
|
|||
|
|
@ -6,15 +6,13 @@ import 'mocha'
|
|||
import { User } from '../../src/entity/user'
|
||||
|
||||
describe('Subscriptions API', () => {
|
||||
const username = 'fakeUser'
|
||||
|
||||
let user: User
|
||||
let authToken: string
|
||||
let subscriptions: Subscription[]
|
||||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -29,7 +27,7 @@ describe('Subscriptions API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('GET subscriptions', () => {
|
||||
|
|
|
|||
|
|
@ -6,15 +6,13 @@ import { User } from '../../src/entity/user'
|
|||
import { Page } from '../../src/elastic/types'
|
||||
|
||||
describe('Update API', () => {
|
||||
const username = 'fakeUser'
|
||||
|
||||
let user: User
|
||||
let authToken: string
|
||||
let page: Page
|
||||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -25,7 +23,7 @@ describe('Update API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('update page', () => {
|
||||
|
|
|
|||
|
|
@ -46,14 +46,13 @@ const uploadFileRequest = async (
|
|||
}
|
||||
|
||||
describe('uploadFileRequest API', () => {
|
||||
const username = 'fakeUser'
|
||||
let authToken: string
|
||||
let user: User
|
||||
let ctx: PageContext
|
||||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -68,7 +67,7 @@ describe('uploadFileRequest API', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('UploadFileRequest', () => {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import { hashPassword } from '../../src/utils/auth'
|
|||
import 'mocha'
|
||||
|
||||
describe('User API', () => {
|
||||
const username = 'fake_user'
|
||||
const correctPassword = 'fakePassword'
|
||||
const anotherUsername = 'newFakeUser'
|
||||
|
||||
|
|
@ -21,7 +20,7 @@ describe('User API', () => {
|
|||
before(async () => {
|
||||
const hashedPassword = await hashPassword(correctPassword)
|
||||
// create test user and login
|
||||
user = await createTestUser(username, '', hashedPassword)
|
||||
user = await createTestUser('fake_user', '', hashedPassword)
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -34,8 +33,8 @@ describe('User API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(anotherUsername)
|
||||
await deleteTestUser(user.id)
|
||||
await deleteTestUser(anotherUser.id)
|
||||
})
|
||||
|
||||
describe('Update user', () => {
|
||||
|
|
|
|||
|
|
@ -28,13 +28,12 @@ const deleteAccountRequest = async (authToken: string, userId: string) => {
|
|||
}
|
||||
|
||||
describe('the deleteAccount API', () => {
|
||||
const username = 'newFakeUser'
|
||||
let authToken: string
|
||||
let user: User
|
||||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('newFakeUser')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -43,7 +42,7 @@ describe('the deleteAccount API', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
context('deleting a user that exists', () => {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import {
|
||||
createTestDeviceToken,
|
||||
createTestUser,
|
||||
deleteTestDeviceTokens,
|
||||
deleteTestUser,
|
||||
getDeviceToken,
|
||||
} from '../db'
|
||||
|
|
@ -13,15 +14,13 @@ import { User } from '../../src/entity/user'
|
|||
import { getRepository } from '../../src/entity/utils'
|
||||
|
||||
describe('Device tokens API', () => {
|
||||
const username = 'fakeUser'
|
||||
|
||||
let authToken: string
|
||||
let deviceToken: UserDeviceToken
|
||||
let user: User
|
||||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -34,7 +33,7 @@ describe('Device tokens API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('Set device token', () => {
|
||||
|
|
@ -68,7 +67,7 @@ describe('Device tokens API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await getRepository(UserDeviceToken).delete({ user: { id: user.id } })
|
||||
await deleteTestDeviceTokens(user.id, { user: { id: user.id } })
|
||||
})
|
||||
|
||||
context('when id in input is not null', () => {
|
||||
|
|
@ -176,7 +175,7 @@ describe('Device tokens API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await getRepository(UserDeviceToken).delete({ token })
|
||||
await deleteTestDeviceTokens(user.id, { token })
|
||||
})
|
||||
|
||||
it('responds with status code 200 and returns all device tokens', async () => {
|
||||
|
|
|
|||
|
|
@ -12,10 +12,11 @@ import { Link } from '../../src/entity/link'
|
|||
import { Highlight } from '../../src/entity/highlight'
|
||||
import 'mocha'
|
||||
import { getRepository } from '../../src/entity/utils'
|
||||
import { User } from '../../src/entity/user'
|
||||
|
||||
describe('User feed article API', () => {
|
||||
const existingUsername = 'fakeUser'
|
||||
|
||||
let user: User
|
||||
let authToken: string
|
||||
let page: Page
|
||||
let link: Link
|
||||
|
|
@ -23,7 +24,7 @@ describe('User feed article API', () => {
|
|||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
const user = await createTestUser(existingUsername)
|
||||
user = await createTestUser(existingUsername)
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -44,7 +45,7 @@ describe('User feed article API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(existingUsername)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('get shared article', () => {
|
||||
|
|
@ -161,7 +162,8 @@ describe('User feed article API', () => {
|
|||
})
|
||||
})
|
||||
|
||||
it('should responds SharedArticleSuccess', async () => {
|
||||
// TODO: add test for shared article when shared article api is ready
|
||||
xit('should responds SharedArticleSuccess', async () => {
|
||||
const response = await graphqlRequest(query, authToken).expect(200)
|
||||
expect(response.body.data.sharedArticle.article.id).to.eql(page.id)
|
||||
})
|
||||
|
|
|
|||
|
|
@ -8,14 +8,12 @@ import { Webhook } from '../../src/entity/webhook'
|
|||
import { getRepository } from '../../src/entity/utils'
|
||||
|
||||
describe('Webhooks API', () => {
|
||||
const username = 'fakeUser'
|
||||
|
||||
let user: User
|
||||
let authToken: string
|
||||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -39,7 +37,7 @@ describe('Webhooks API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('Get webhook', () => {
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@ import { expect } from 'chai'
|
|||
import nock from 'nock'
|
||||
import 'mocha'
|
||||
import { env } from '../../src/env'
|
||||
import { User } from '../../src/entity/user'
|
||||
|
||||
describe('/article/save API', () => {
|
||||
const username = 'fakeUser'
|
||||
|
||||
let user: User
|
||||
let authToken: string
|
||||
|
||||
// We need to mock the pupeeteer-parse
|
||||
|
|
@ -17,7 +17,7 @@ describe('/article/save API', () => {
|
|||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
const user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -27,7 +27,7 @@ describe('/article/save API', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('POST /article/save', () => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { createTestUser, deleteTestUser } from '../db'
|
||||
import { createTestUser, deleteTestUser, updateTestUser } from '../db'
|
||||
import { generateFakeUuid, request } from '../util'
|
||||
import { StatusType } from '../../src/datalayer/user/model'
|
||||
import { getRepository } from '../../src/entity/utils'
|
||||
|
|
@ -55,7 +55,8 @@ describe('auth router', () => {
|
|||
})
|
||||
|
||||
afterEach(async () => {
|
||||
await deleteTestUser(username)
|
||||
const user = await getRepository(User).findOneBy({ name })
|
||||
await deleteTestUser(user!.id)
|
||||
})
|
||||
|
||||
context('when confirmation email sent', () => {
|
||||
|
|
@ -112,15 +113,17 @@ describe('auth router', () => {
|
|||
})
|
||||
|
||||
context('when user exists', () => {
|
||||
let user: User
|
||||
|
||||
before(async () => {
|
||||
username = 'Some_username'
|
||||
const user = await createTestUser(username)
|
||||
user = await createTestUser(username)
|
||||
email = user.email
|
||||
password = 'Some password'
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
it('redirects to sign up page with error code USER_EXISTS', async () => {
|
||||
|
|
@ -170,7 +173,7 @@ describe('auth router', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await deleteTestUser(user.name)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
context('when email and password are valid', () => {
|
||||
|
|
@ -196,17 +199,13 @@ describe('auth router', () => {
|
|||
|
||||
beforeEach(async () => {
|
||||
fake = sinon.replace(util, 'sendEmail', sinon.fake.resolves(true))
|
||||
await getRepository(User).update(user.id, {
|
||||
status: StatusType.Pending,
|
||||
})
|
||||
await updateTestUser(user.id, { status: StatusType.Pending })
|
||||
email = user.email
|
||||
password = correctPassword
|
||||
})
|
||||
|
||||
afterEach(async () => {
|
||||
await getRepository(User).update(user.id, {
|
||||
status: StatusType.Active,
|
||||
})
|
||||
await updateTestUser(user.id, { status: StatusType.Active })
|
||||
sinon.restore()
|
||||
})
|
||||
|
||||
|
|
@ -238,17 +237,13 @@ describe('auth router', () => {
|
|||
|
||||
context('when user has no password stored in db', async () => {
|
||||
before(async () => {
|
||||
await getRepository(User).update(user.id, {
|
||||
password: '',
|
||||
})
|
||||
await updateTestUser(user.id, { password: '' })
|
||||
email = user.email
|
||||
password = user.password!
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
await getRepository(User).update(user.id, {
|
||||
password,
|
||||
})
|
||||
await updateTestUser(user.id, { password })
|
||||
})
|
||||
|
||||
it('redirects with error code WrongSource', async () => {
|
||||
|
|
@ -289,7 +284,7 @@ describe('auth router', () => {
|
|||
|
||||
after(async () => {
|
||||
sinon.restore()
|
||||
await deleteTestUser(user.name)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
context('when token is valid', () => {
|
||||
|
|
@ -377,16 +372,14 @@ describe('auth router', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await deleteTestUser(user.name)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
context('when email is verified', () => {
|
||||
let fake: (msg: MailDataRequired) => Promise<boolean>
|
||||
|
||||
before(async () => {
|
||||
await getRepository(User).update(user.id, {
|
||||
status: StatusType.Active,
|
||||
})
|
||||
await updateTestUser(user.id, { status: StatusType.Active })
|
||||
})
|
||||
|
||||
context('when reset password email sent', () => {
|
||||
|
|
@ -428,9 +421,7 @@ describe('auth router', () => {
|
|||
|
||||
context('when email is not verified', () => {
|
||||
before(async () => {
|
||||
await getRepository(User).update(user.id, {
|
||||
status: StatusType.Pending,
|
||||
})
|
||||
await updateTestUser(user.id, { status: StatusType.Pending })
|
||||
})
|
||||
|
||||
it('redirects to email-login page with error code PENDING_VERIFICATION', async () => {
|
||||
|
|
@ -485,7 +476,7 @@ describe('auth router', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await deleteTestUser(user.name)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
context('when token is valid', () => {
|
||||
|
|
@ -578,7 +569,8 @@ describe('auth router', () => {
|
|||
let provider: AuthProvider = 'EMAIL'
|
||||
|
||||
afterEach(async () => {
|
||||
await deleteTestUser(username)
|
||||
const user = await getRepository(User).findOneBy({ name })
|
||||
await deleteTestUser(user!.id)
|
||||
})
|
||||
|
||||
it('adds popular reads to the library', async () => {
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ import * as sendNotification from '../../src/utils/sendNotification'
|
|||
import * as sendEmail from '../../src/utils/sendEmail'
|
||||
|
||||
describe('Emails Router', () => {
|
||||
const username = 'fakeUser'
|
||||
const newsletterEmail = 'fakeUser@omnivore.app'
|
||||
|
||||
let user: User
|
||||
|
|
@ -21,7 +20,7 @@ describe('Emails Router', () => {
|
|||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
|
||||
await createTestNewsletterEmail(user, newsletterEmail)
|
||||
token = process.env.PUBSUB_VERIFICATION_TOKEN!
|
||||
|
|
@ -29,7 +28,7 @@ describe('Emails Router', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
sinon.restore()
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import {
|
|||
PubSubRequestBody,
|
||||
} from '../../src/datalayer/pubsub'
|
||||
import { User } from '../../src/entity/user'
|
||||
import { createTestUser, deleteTestUser } from '../db'
|
||||
import { createTestUser, deleteTestIntegrations, deleteTestUser } from '../db'
|
||||
import { Integration, IntegrationType } from '../../src/entity/integration'
|
||||
import { getRepository } from '../../src/entity/utils'
|
||||
import { Highlight, Page, PageContext } from '../../src/elastic/types'
|
||||
|
|
@ -85,7 +85,7 @@ describe('Integrations routers', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await deleteTestUser(user.name)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
context('when integration not found', () => {
|
||||
|
|
@ -166,7 +166,7 @@ describe('Integrations routers', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await getRepository(Integration).delete(integration.id)
|
||||
await deleteTestIntegrations(user.id, [integration.id])
|
||||
await deletePage(page.id, ctx)
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import { expect } from 'chai'
|
|||
import { getPageById } from '../../src/elastic/pages'
|
||||
|
||||
describe('PDF attachments Router', () => {
|
||||
const username = 'fakeUser'
|
||||
const newsletterEmail = 'fakeEmail@omnivore.app'
|
||||
|
||||
let user: User
|
||||
|
|
@ -19,7 +18,7 @@ describe('PDF attachments Router', () => {
|
|||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
|
||||
await createTestNewsletterEmail(user, newsletterEmail)
|
||||
authToken = jwt.sign(newsletterEmail, process.env.JWT_SECRET || '')
|
||||
|
|
@ -27,7 +26,7 @@ describe('PDF attachments Router', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('upload', () => {
|
||||
|
|
|
|||
|
|
@ -13,15 +13,13 @@ import { expect } from 'chai'
|
|||
import 'mocha'
|
||||
|
||||
describe('Reminders Router', () => {
|
||||
const username = 'fakeUser'
|
||||
|
||||
let authToken: string
|
||||
let user: User
|
||||
let reminder: Reminder
|
||||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -35,7 +33,7 @@ describe('Reminders Router', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('trigger reminders', () => {
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import { expect } from 'chai'
|
|||
import nock from 'nock'
|
||||
|
||||
describe('Webhooks Router', () => {
|
||||
const username = 'fakeUser'
|
||||
const token = process.env.PUBSUB_VERIFICATION_TOKEN || ''
|
||||
const webhookBaseUrl = 'https://localhost:3000'
|
||||
const webhookPath = `/webhooks`
|
||||
|
|
@ -18,7 +17,7 @@ describe('Webhooks Router', () => {
|
|||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
|
@ -32,7 +31,7 @@ describe('Webhooks Router', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
describe('trigger webhooks', () => {
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@ import sinonChai from 'sinon-chai'
|
|||
import sinon from 'sinon'
|
||||
import * as util from '../../src/utils/sendEmail'
|
||||
import { MailDataRequired } from '@sendgrid/helpers/classes/mail'
|
||||
import { User } from '../../src/entity/user'
|
||||
import { getRepository } from '../../src/entity/utils'
|
||||
|
||||
chai.use(sinonChai)
|
||||
|
||||
|
|
@ -24,8 +26,14 @@ describe('create user', () => {
|
|||
context('create a user with an invite', () => {
|
||||
it('follows the other user in the group', async () => {
|
||||
after(async () => {
|
||||
await deleteTestUser(testOwner)
|
||||
await deleteTestUser(testUser)
|
||||
const testUser = await getRepository(User).findOneBy({
|
||||
name: 'testuser',
|
||||
})
|
||||
await deleteTestUser(testUser!.id)
|
||||
const testOwner = await getRepository(User).findOneBy({
|
||||
name: 'testowner',
|
||||
})
|
||||
await deleteTestUser(testOwner!.id)
|
||||
})
|
||||
|
||||
const testOwner = 'testowner'
|
||||
|
|
@ -46,7 +54,10 @@ describe('create user', () => {
|
|||
|
||||
it('creates profile when user exists but profile not', async () => {
|
||||
after(async () => {
|
||||
await deleteTestUser(name)
|
||||
const user = await getRepository(User).findOneBy({
|
||||
name: 'userWithoutProfile',
|
||||
})
|
||||
await deleteTestUser(user!.id)
|
||||
})
|
||||
|
||||
const name = 'userWithoutProfile'
|
||||
|
|
@ -71,7 +82,8 @@ describe('create user', () => {
|
|||
|
||||
afterEach(async () => {
|
||||
sinon.restore()
|
||||
await deleteTestUser(name)
|
||||
const user = await getRepository(User).findOneBy({ name })
|
||||
await deleteTestUser(user!.id)
|
||||
})
|
||||
|
||||
it('creates the user with pending status and correct name', async () => {
|
||||
|
|
@ -95,7 +107,8 @@ describe('create user', () => {
|
|||
|
||||
after(async () => {
|
||||
sinon.restore()
|
||||
await deleteTestUser(name)
|
||||
const user = await getRepository(User).findOneBy({ name })
|
||||
await deleteTestUser(user!.id)
|
||||
})
|
||||
|
||||
it('rejects with error', async () => {
|
||||
|
|
|
|||
|
|
@ -13,15 +13,16 @@ import { Label } from '../../src/entity/label'
|
|||
import { Link } from '../../src/entity/link'
|
||||
import { labelsLoader } from '../../src/services/labels'
|
||||
import { getRepository } from '../../src/entity/utils'
|
||||
import { User } from '../../src/entity/user'
|
||||
|
||||
describe('batch get labels from linkIds', () => {
|
||||
let username = 'testUser'
|
||||
let user: User
|
||||
let labels: Label[] = []
|
||||
let link: Link
|
||||
|
||||
before(async () => {
|
||||
// create test user
|
||||
const user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
|
||||
// Create some test links
|
||||
const page = await createTestPage()
|
||||
|
|
@ -41,7 +42,7 @@ describe('batch get labels from linkIds', () => {
|
|||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
it('should return a list of label from one link', async () => {
|
||||
|
|
|
|||
|
|
@ -6,13 +6,19 @@ import { SaveContext, saveEmail } from '../../src/services/save_email'
|
|||
import { createPubSubClient } from '../../src/datalayer/pubsub'
|
||||
import { getPageByParam } from '../../src/elastic/pages'
|
||||
import nock from 'nock'
|
||||
import { User } from '../../src/entity/user'
|
||||
|
||||
describe('saveEmail', () => {
|
||||
const username = 'fakeUser'
|
||||
const fakeContent = 'fake content'
|
||||
let user: User
|
||||
|
||||
before(async () => {
|
||||
// create test user
|
||||
user = await createTestUser('fakeUser')
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
it('doesnt fail if saved twice', async () => {
|
||||
|
|
@ -21,7 +27,6 @@ describe('saveEmail', () => {
|
|||
const url = 'https://blog.omnivore.app/fake-url'
|
||||
const title = 'fake title'
|
||||
const author = 'fake author'
|
||||
const user = await createTestUser(username)
|
||||
const ctx: SaveContext = {
|
||||
pubsub: createPubSubClient(),
|
||||
uid: user.id,
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ import { getPageByParam } from '../../src/elastic/pages'
|
|||
import nock from 'nock'
|
||||
|
||||
describe('saveNewsletterEmail', () => {
|
||||
const username = 'fakeUser'
|
||||
const fakeContent = 'fake content'
|
||||
const title = 'fake title'
|
||||
const author = 'fake author'
|
||||
|
|
@ -22,7 +21,7 @@ describe('saveNewsletterEmail', () => {
|
|||
let ctx: SaveContext
|
||||
|
||||
before(async () => {
|
||||
user = await createTestUser(username)
|
||||
user = await createTestUser('fakeUser')
|
||||
email = await createNewsletterEmail(user.id)
|
||||
ctx = {
|
||||
pubsub: createPubSubClient(),
|
||||
|
|
@ -32,7 +31,7 @@ describe('saveNewsletterEmail', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await deleteTestUser(username)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
it('adds the newsletter to the library', async () => {
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ describe('isProbablyArticle', () => {
|
|||
})
|
||||
|
||||
after(async () => {
|
||||
await deleteTestUser(user.name)
|
||||
await deleteTestUser(user.id)
|
||||
})
|
||||
|
||||
it('returns true when email is signed up with us', async () => {
|
||||
|
|
|
|||
Loading…
Reference in a new issue