tests.ts•2.96 kB
import { Providers } from '../_utils/providers'
import testMatrix from './_matrix'
// @ts-ignore
import type { PrismaClient } from './generated/prisma/client'
declare let prisma: PrismaClient
testMatrix.setupTestSuite(
  () => {
    beforeAll(async () => {
      await prisma.user.create({
        data: {
          age: 1,
          name: null,
        },
      })
      await prisma.user.create({
        data: {
          age: 2,
          name: 'a',
        },
      })
      await prisma.user.create({
        data: {
          age: 3,
          name: null,
        },
      })
      await prisma.user.create({
        data: {
          age: 4,
          name: 'b',
        },
      })
    })
    test('should return records sorted by name asc and null first', async () => {
      const records = await prisma.user.findMany({
        select: {
          name: true,
        },
        orderBy: {
          name: {
            sort: 'asc',
            nulls: 'first',
          },
        },
      })
      expect(records).toMatchObject([
        {
          name: null,
        },
        {
          name: null,
        },
        {
          name: 'a',
        },
        {
          name: 'b',
        },
      ])
    })
    test('should return records sorted by name asc and null last', async () => {
      const records = await prisma.user.findMany({
        select: {
          name: true,
        },
        orderBy: {
          name: {
            sort: 'asc',
            nulls: 'last',
          },
        },
      })
      expect(records).toMatchObject([
        {
          name: 'a',
        },
        {
          name: 'b',
        },
        {
          name: null,
        },
        {
          name: null,
        },
      ])
    })
    test('should return records sorted by name desc and null first', async () => {
      const records = await prisma.user.findMany({
        select: {
          name: true,
        },
        orderBy: {
          name: {
            sort: 'desc',
            nulls: 'first',
          },
        },
      })
      expect(records).toMatchObject([
        {
          name: null,
        },
        {
          name: null,
        },
        {
          name: 'b',
        },
        {
          name: 'a',
        },
      ])
    })
    test('should return records sorted by name desc and null last', async () => {
      const records = await prisma.user.findMany({
        select: {
          name: true,
        },
        orderBy: {
          name: {
            sort: 'desc',
            nulls: 'last',
          },
        },
      })
      expect(records).toMatchObject([
        {
          name: 'b',
        },
        {
          name: 'a',
        },
        {
          name: null,
        },
        {
          name: null,
        },
      ])
    })
  },
  {
    optOut: {
      from: [Providers.MONGODB],
      reason: 'Orderby Null not supported on mongodb',
    },
  },
)