import { convertToJS } from "../src/index" function checkLines(response: string, lines: string[]) { const toCheck = response.split("\n") let count = 0 for (let line of lines) { expect(toCheck[count++]).toBe(line) } } describe("Test that the string processing works correctly", () => { it("should convert string without HBS", () => { const response = convertToJS("Hello my name is Michael") expect(response).toBe("return `Hello my name is Michael`;") }) it("basic example with square brackets", () => { const response = convertToJS("{{ [query] }}") checkLines(response, ['const var1 = $("[query]");', "return `${var1}`;"]) }) it("handle properties", () => { const response = convertToJS("{{ [query].id }}") checkLines(response, ['const var1 = $("[query].id");', "return `${var1}`;"]) }) it("should convert some basic HBS strings", () => { const response = convertToJS("Hello {{ name }}, welcome to {{ company }}!") checkLines(response, [ 'const var1 = $("name");', 'const var2 = $("company");', "return `Hello ${var1}, welcome to ${var2}`;", ]) }) it("should handle many square brackets in helpers", () => { const response = convertToJS("Hello {{ avg [user].[_id] [user].[_rev] }}") checkLines(response, [ 'const var1 = helpers.avg($("[user].[_id]"), $("[user].[_rev]"));', "return `Hello ${var1}`;", ]) }) it("should handle one of the examples (after)", () => { const response = convertToJS("{{ after [1, 2, 3] 1}}") checkLines(response, [ "const var1 = helpers.after([1, 2, 3], 1);", "return `${var1}`;", ]) }) it("should handle one of the examples (equalsLength)", () => { const response = convertToJS("{{equalsLength '[1,2,3]' 3}}") checkLines(response, [ "const var1 = helpers.equalsLength('[1,2,3]', 3);", "return `${var1}`;", ]) }) it("should handle one of the examples (pluck)", () => { const response = convertToJS("{{pluck [{ 'name': 'Bob' }] 'name' }}") checkLines(response, [ "const var1 = helpers.pluck([{ 'name': 'Bob' }], 'name');", "return `${var1}`;", ]) }) it("should handle sorting an array", () => { const response = convertToJS("{{ sort ['b', 'a', 'c'] }}") checkLines(response, [ "const var1 = helpers.sort(['b', 'a', 'c']);", "return `${var1}`;", ]) }) it("should handle a helper block", () => { const response = convertToJS("This is the average: {{ avg array }}") checkLines(response, [ 'const var1 = helpers.avg($("array"));', "return `This is the average: ${var1}`;", ]) }) it("should handle multi-variable helper", () => { const response = convertToJS( "This is the average: {{ join ( avg val1 val2 val3 ) }}" ) checkLines(response, [ 'const var1 = helpers.join(helpers.avg($("val1"), $("val2"), $("val3")));', "return `This is the average: ${var1}`;", ]) }) it("should handle a complex statement", () => { const response = convertToJS( "This is the average: {{ join ( avg val1 val2 val3 ) val4 }}" ) checkLines(response, [ 'const var1 = helpers.join(helpers.avg($("val1"), $("val2"), $("val3")), $("val4"));', "return `This is the average: ${var1}`;", ]) }) it("should handle square brackets", () => { const response = convertToJS("This is: {{ [val thing] }}") checkLines(response, [ 'const var1 = $("[val thing]");', "return `This is: ${var1}`;", ]) }) it("should handle square brackets with properties", () => { const response = convertToJS("{{ [user].[_id] }}") checkLines(response, [ 'const var1 = $("[user].[_id]");', "return `${var1}`;", ]) }) it("should handle multiple complex statements", () => { const response = convertToJS( "average: {{ avg ( abs val1 ) val2 }} add: {{ add 1 2 }}" ) checkLines(response, [ 'const var1 = helpers.avg(helpers.abs($("val1")), $("val2"));', "const var2 = helpers.add(1, 2);", "return `average: ${var1} add: ${var2}`;", ]) }) it("should handle uuids", () => { const response = convertToJS("This is: {{ uuid }}") checkLines(response, [ "const var1 = helpers.uuid();", "return `This is: ${var1}`;", ]) }) })