index.spec.ts 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /*
  2. * Copyright 2021-2024 Avaiga Private Limited
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
  5. * the License. You may obtain a copy of the License at
  6. *
  7. * http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
  10. * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  11. * specific language governing permissions and limitations under the License.
  12. */
  13. import "@testing-library/jest-dom";
  14. import { FormatConfig } from "../context/taipyReducers";
  15. import { getNumberString, getDateTimeString } from "./index";
  16. let myWarn: jest.Mock;
  17. beforeEach(() => {
  18. myWarn = jest.fn();
  19. console.warn = myWarn;
  20. })
  21. const getNumberFormatConfig = (numberFormat?: string): FormatConfig => ({timeZone: "", date: "", dateTime: "", number: numberFormat || "", forceTZ: false})
  22. const getDateFormatConfig = (dateFormat?: string): FormatConfig => ({timeZone: "", date: dateFormat || "", dateTime: dateFormat || "", number: "", forceTZ: false})
  23. describe("getNumberString", () => {
  24. it("returns straight", async () => {
  25. expect(getNumberString(1, undefined, getNumberFormatConfig())).toBe("1");
  26. });
  27. it("returns formatted", async () => {
  28. expect(getNumberString(1, "%.1f", getNumberFormatConfig())).toBe("1.0");
  29. });
  30. it("returns formatted float", async () => {
  31. expect(getNumberString(1.0, "%.0f", getNumberFormatConfig())).toBe("1");
  32. });
  33. it("returns default formatted", async () => {
  34. expect(getNumberString(1, "", getNumberFormatConfig("%.1f"))).toBe("1.0");
  35. });
  36. it("returns for non variable format", async () => {
  37. expect(getNumberString(1, "toto", getNumberFormatConfig())).toBe("toto");
  38. });
  39. it("returns formatted over default", async () => {
  40. expect(getNumberString(1, "%.2f", getNumberFormatConfig("%.1f"))).toBe("1.00");
  41. });
  42. it("returns for string", async () => {
  43. expect(getNumberString("null" as unknown as number, "", getNumberFormatConfig("%.1f"))).toBe("null");
  44. expect(myWarn).toHaveBeenCalledWith("Invalid number format:", "[sprintf] expecting number but found string")
  45. });
  46. it("returns for object", async () => {
  47. expect(getNumberString({t: 1} as unknown as number, "", getNumberFormatConfig("%.1f"))).toBe("");
  48. expect(myWarn).toHaveBeenCalledWith("Invalid number format:", "[sprintf] expecting number but found object")
  49. });
  50. it("returns for bad format", async () => {
  51. expect(getNumberString(1, "%.f", getNumberFormatConfig())).toBe("1");
  52. expect(myWarn).toHaveBeenCalledWith("Invalid number format:", "[sprintf] unexpected placeholder")
  53. });
  54. it("returns for null", async () => {
  55. expect(getNumberString(null as unknown as number, "%2.f", getNumberFormatConfig("%.1f"))).toBe("");
  56. expect(myWarn).toHaveBeenCalledWith("Invalid number format:", "[sprintf] unexpected placeholder")
  57. });
  58. it("returns for undefined", async () => {
  59. expect(getNumberString(undefined as unknown as number, "%2.f", getNumberFormatConfig("%.1f"))).toBe("");
  60. expect(myWarn).toHaveBeenCalledWith("Invalid number format:", "[sprintf] unexpected placeholder")
  61. });
  62. it("returns for NaN", async () => {
  63. expect(getNumberString(NaN, "%2.f", getNumberFormatConfig("%.1f"))).toBe("NaN");
  64. expect(myWarn).toHaveBeenCalledWith("Invalid number format:", "[sprintf] unexpected placeholder")
  65. });
  66. });
  67. describe("getDateTimeString", () => {
  68. it("returns straight", async () => {
  69. expect(getDateTimeString("2024-10-05", undefined, getDateFormatConfig())).toContain("05 2024");
  70. });
  71. it("returns formatted", async () => {
  72. expect(getDateTimeString("2024-10-05", "dd-MM-yy", getDateFormatConfig())).toBe("05-10-24");
  73. });
  74. it("returns default formatted", async () => {
  75. expect(getDateTimeString("2024-10-05", "", getDateFormatConfig("dd-MM-yy"))).toBe("05-10-24");
  76. });
  77. it("returns formatted over default", async () => {
  78. expect(getDateTimeString("2024-10-05", "dd-MM-yy", getNumberFormatConfig("yy-MM-dd"))).toBe("05-10-24");
  79. });
  80. it("returns for string", async () => {
  81. expect(getDateTimeString("null" as unknown as string, "", getDateFormatConfig("dd-MM-yy"))).toBe("Invalid Date");
  82. expect(myWarn).toHaveBeenCalledWith("Invalid date format:", "Invalid time value")
  83. });
  84. it("returns for object", async () => {
  85. expect(getDateTimeString({t: 1} as unknown as string, "", getDateFormatConfig("dd-MM-yy"))).toBe("Invalid Date");
  86. expect(myWarn).toHaveBeenCalledWith("Invalid date format:", "Invalid time value")
  87. });
  88. it("returns for bad format", async () => {
  89. expect(getDateTimeString("2024-10-05", "ABCDEF", getDateFormatConfig())).toContain("05 2024");
  90. expect(myWarn).toHaveBeenCalled()
  91. expect(myWarn.mock.lastCall).toHaveLength(2)
  92. expect(myWarn.mock.lastCall[0]).toBe("Invalid date format:")
  93. expect(myWarn.mock.lastCall[1]).toContain("Format string contains an unescaped latin alphabet character `A`")
  94. });
  95. it("returns for null", async () => {
  96. expect(getDateTimeString(null as unknown as string, "dd-MM-yy", getDateFormatConfig())).toBe("null");
  97. expect(myWarn).toHaveBeenCalledWith("Invalid date format:", "Invalid time value")
  98. });
  99. it("returns for undefined", async () => {
  100. expect(getDateTimeString(undefined as unknown as string, "dd-MM-yy", getDateFormatConfig())).toBe("null");
  101. expect(myWarn).toHaveBeenCalledWith("Invalid date format:", "Invalid time value")
  102. });
  103. });