testFlags.ts 986 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. // Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. import { Mutex } from 'async-mutex'
  3. class TestFlags {
  4. private mutex = new Mutex()
  5. private flags: Map<string, boolean> = new Map()
  6. get(flag: string, skipClearing = false): boolean {
  7. if (!VITE_TEST_MODE) return false
  8. const flagValue = !!this.flags.get(flag)
  9. if (!skipClearing) this.clear(flag)
  10. return flagValue
  11. }
  12. async set(flag: string): Promise<void> {
  13. if (!VITE_TEST_MODE) return
  14. await this.mutex.runExclusive(() => {
  15. this.flags.set(flag, true)
  16. })
  17. }
  18. async clear(flag: string): Promise<void> {
  19. if (!VITE_TEST_MODE) return
  20. await this.mutex.runExclusive(() => {
  21. this.flags.delete(flag)
  22. })
  23. }
  24. }
  25. const testFlags = new TestFlags()
  26. declare global {
  27. interface Window {
  28. testFlags: TestFlags
  29. }
  30. }
  31. if (VITE_TEST_MODE) {
  32. // Register globally for access from Capybara/Selenium.
  33. window.testFlags = testFlags
  34. }
  35. export default testFlags