1
import { createBus, type BusLocal, type BusRedis } from '@directus/memory';
2
import type { Redis } from 'ioredis';
3
import { afterEach, beforeEach, expect, test, vi } from 'vitest';
4
import { redisConfigAvailable, useRedis } from '../../redis/index.js';
5
import { _cache, useBus } from './use-bus.js';
7
vi.mock('../../redis/index.js');
8
vi.mock('@directus/memory');
10
let mockBus: BusLocal | BusRedis;
13
mockBus = {} as unknown as BusLocal;
14
vi.mocked(createBus).mockReturnValue(mockBus);
19
_cache.bus = undefined;
22
test('Returns existing bus if exists', () => {
27
expect(bus).toBe(mockBus);
30
test('Creates Redis based bus if Redis configuration is available', () => {
31
const mockRedis = {} as unknown as Redis;
32
vi.mocked(redisConfigAvailable).mockReturnValue(true);
33
vi.mocked(useRedis).mockReturnValue(mockRedis);
37
expect(createBus).toHaveBeenCalledWith({
40
namespace: 'directus:bus',
43
expect(_cache.bus).toBe(mockBus);
46
test('Creates Local bus if Redis configuration is unavailable', () => {
47
vi.mocked(redisConfigAvailable).mockReturnValue(false);
51
expect(createBus).toHaveBeenCalledWith({
55
expect(_cache.bus).toBe(mockBus);
58
test('Returns created bus', () => {
59
vi.mocked(redisConfigAvailable).mockReturnValue(false);
63
expect(bus).toBe(_cache.bus);
64
expect(bus).toBe(mockBus);