mirror of
https://github.com/SrIzan10/next-auth.git
synced 2026-05-01 10:55:20 +00:00
* feat: pnpm * Update publish script * gitignore the pnpm debug log * Fix workspace * Fix dev commands * feat: pnpm * Update publish script * gitignore the pnpm debug log * Fix workspace * Fix dev commands * chore: fix pnpm install in GitHub Action * fix: update tsconfig path * pnpm run -> pnpm * chore: remove cache-node and add back setup-node * fix: tsconfig dependencies * chore: fix tsconfig path * fix: adapter-test dependencies * fix: setup-node for release-pr * fix: import adapter-test * chore: update workspace dependency for next-auth * fix: test failure * fix: add jest for adapters * fix: jest again * fix: mongo in prisma * fix: `--no-git-checks` for `release-pr` Co-authored-by: Balázs Orbán <info@balazsorban.com>
166 lines
4.6 KiB
TypeScript
166 lines
4.6 KiB
TypeScript
import { Sequelize, DataTypes } from "sequelize"
|
|
import { runBasicTests } from "@next-auth/adapter-test"
|
|
import SequelizeAdapter, { models } from "../src"
|
|
|
|
const sequelize = new Sequelize({
|
|
logging: false,
|
|
dialect: "sqlite",
|
|
storage: ":memory:",
|
|
})
|
|
|
|
runBasicTests({
|
|
adapter: SequelizeAdapter(sequelize),
|
|
db: {
|
|
connect: async () => {
|
|
return await sequelize.sync({ force: true })
|
|
},
|
|
verificationToken: async (where) => {
|
|
const verificationToken =
|
|
await sequelize.models.verificationToken.findOne({ where })
|
|
|
|
return verificationToken?.get({ plain: true }) || null
|
|
},
|
|
user: async (id) => {
|
|
const user = await sequelize.models.user.findByPk(id)
|
|
|
|
return user?.get({ plain: true }) || null
|
|
},
|
|
account: async (where) => {
|
|
const account = await sequelize.models.account.findOne({ where })
|
|
|
|
return account?.get({ plain: true }) || null
|
|
},
|
|
session: async (sessionToken) => {
|
|
const session = await sequelize.models.session.findOne({
|
|
where: { sessionToken },
|
|
})
|
|
|
|
return session?.get({ plain: true }) || null
|
|
},
|
|
},
|
|
})
|
|
|
|
describe("Additional Sequelize tests", () => {
|
|
describe("synchronize option", () => {
|
|
const lowercase = (strs: string[]) =>
|
|
strs.map((s) => s.replace(/[^a-z]/gi, "").toLowerCase())
|
|
|
|
beforeEach(async () => {
|
|
await sequelize.getQueryInterface().dropAllTables()
|
|
|
|
const { getUser } = SequelizeAdapter(sequelize)
|
|
|
|
await getUser("1")
|
|
})
|
|
|
|
test("Creates DB tables", async () => {
|
|
const tables = await sequelize.getQueryInterface().showAllSchemas()
|
|
|
|
expect(tables).toEqual([
|
|
{ name: "users" },
|
|
{ name: "accounts" },
|
|
{ name: "sessions" },
|
|
{ name: "verification_tokens" },
|
|
])
|
|
})
|
|
|
|
test("Correctly creates users table", async () => {
|
|
const table = await sequelize.getQueryInterface().describeTable("users")
|
|
|
|
expect(lowercase(Object.keys(table))).toEqual(
|
|
lowercase(Object.keys(models.User))
|
|
)
|
|
})
|
|
|
|
test("Correctly creates accounts table", async () => {
|
|
const table = await sequelize
|
|
.getQueryInterface()
|
|
.describeTable("accounts")
|
|
|
|
expect(lowercase(Object.keys(table))).toEqual(
|
|
lowercase(Object.keys(models.Account))
|
|
)
|
|
})
|
|
|
|
test("Correctly creates sessions table", async () => {
|
|
const table = await sequelize
|
|
.getQueryInterface()
|
|
.describeTable("sessions")
|
|
|
|
expect(lowercase(Object.keys(table))).toEqual(
|
|
lowercase(Object.keys(models.Session))
|
|
)
|
|
})
|
|
|
|
test("Correctly creates verification_tokens table", async () => {
|
|
const table = await sequelize
|
|
.getQueryInterface()
|
|
.describeTable("verification_tokens")
|
|
|
|
expect(lowercase(Object.keys(table))).toEqual(
|
|
lowercase(Object.keys(models.VerificationToken))
|
|
)
|
|
})
|
|
})
|
|
|
|
describe("overriding models", () => {
|
|
beforeEach(async () => {
|
|
await sequelize.getQueryInterface().dropAllTables()
|
|
|
|
const { getUser } = SequelizeAdapter(sequelize, {
|
|
synchronize: true,
|
|
models: {
|
|
User: sequelize.define("users", {
|
|
...models.User,
|
|
someUserAttribute: { type: DataTypes.STRING },
|
|
}),
|
|
Account: sequelize.define("accounts", {
|
|
...models.Account,
|
|
someAccountAttribute: { type: DataTypes.STRING },
|
|
}),
|
|
Session: sequelize.define("sessions", {
|
|
...models.Session,
|
|
someSessionAttribute: { type: DataTypes.STRING },
|
|
}),
|
|
VerificationToken: sequelize.define("verification_tokens", {
|
|
...models.VerificationToken,
|
|
someVerificationTokenAttribute: { type: DataTypes.STRING },
|
|
}),
|
|
},
|
|
})
|
|
|
|
await getUser("1")
|
|
})
|
|
|
|
test("Custom user model", async () => {
|
|
const table = await sequelize.getQueryInterface().describeTable("users")
|
|
|
|
expect(table.someUserAttribute).toBeDefined()
|
|
})
|
|
|
|
test("Custom account model", async () => {
|
|
const table = await sequelize
|
|
.getQueryInterface()
|
|
.describeTable("accounts")
|
|
|
|
expect(table.someAccountAttribute).toBeDefined()
|
|
})
|
|
|
|
test("Custom session model", async () => {
|
|
const table = await sequelize
|
|
.getQueryInterface()
|
|
.describeTable("sessions")
|
|
|
|
expect(table.someSessionAttribute).toBeDefined()
|
|
})
|
|
|
|
test("Custom verification_token model", async () => {
|
|
const table = await sequelize
|
|
.getQueryInterface()
|
|
.describeTable("verification_tokens")
|
|
|
|
expect(table.someVerificationTokenAttribute).toBeDefined()
|
|
})
|
|
})
|
|
})
|