DanielHreben/sequelize-transparent-cache

View on GitHub
packages/sequelize-transparent-cache/src/methods/__test__/instance.test.js

Summary

Maintainability
A
0 mins
Test Coverage
const sequelize = require('./sequelize')

const { User } = sequelize.models
const cacheStore = User.cache().client().store

beforeAll(() => sequelize.sync())

describe('Instance methods', () => {
  test('Cache is empty on start', () => {
    expect(cacheStore).toEqual({})
  })

  const user = User.build({
    id: 1,
    name: 'Daniel'
  })

  test('Create', async () => {
    await user.cache().save()

    // User cached after create
    expect(cacheStore.User[1]).toEqual(
      JSON.stringify(user.get())
    )

    // Cached user correctly loaded
    expect((await User.cache().findByPk(1)).get()).toEqual(
      user.get()
    )
  })

  test('Update', async () => {
    await user.cache().update({
      name: 'Dmitry'
    })

    // User name was updated
    expect(user.name).toBe('Dmitry')

    // User cached after upsert
    expect(cacheStore.User[1]).toEqual(
      JSON.stringify(user.get())
    )
  })

  test('Clear', async () => {
    // Cached user correctly loaded
    expect((await User.cache().findByPk(1)).get()).toEqual(
      user.get()
    )
    await user.cache().clear()

    expect(cacheStore.User[1]).toBeUndefined()
  })

  test('Destroy', async () => {
    await user.cache().destroy()

    expect(cacheStore.User[1]).toBeUndefined()
    expect(await User.findByPk(1)).toBeNull()
  })
})