Skip to content

Commit

Permalink
🧪 Add tests for check
Browse files Browse the repository at this point in the history
  • Loading branch information
giacomocavalieri committed Jan 20, 2025
1 parent e241051 commit 3a345a1
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 8 deletions.
31 changes: 23 additions & 8 deletions src/squirrel.gleam
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ import glexer/token
import simplifile
import squirrel/internal/database/postgres
import squirrel/internal/error.{
type Error, CannotWriteToFile, InvalidConnectionString, OutdatedFile,
type Error, CannotReadFile, CannotWriteToFile, InvalidConnectionString,
OutdatedFile,
}
import squirrel/internal/project
import squirrel/internal/query.{type TypedQuery}
Expand Down Expand Up @@ -367,15 +368,20 @@ fn check_queries(
[_, ..] -> Error(errors)
[] -> {
let output_file = directory_to_output_file(directory)
case check_queries_file(queries, output_file) {
Different -> Error([OutdatedFile(output_file)])
Same -> Ok(Nil)
case simplifile.read(output_file) {
Error(reason) -> Error([CannotReadFile(file: output_file, reason:)])
Ok(actual_code) ->
case check_queries_code(queries, actual_code) {
Different -> Error([OutdatedFile(file: output_file)])
Same -> Ok(Nil)
}
}
}
}
}

type CheckResult {
@internal
pub type CheckResult {
Different
Same
}
Expand All @@ -388,16 +394,25 @@ type CheckResult {
/// > account! If the only thing that changed are comments and/or formatting
/// > two files will still be considered the same.
///
fn check_queries_file(queries: List(TypedQuery), file: String) -> CheckResult {
let assert Ok(actual_code) = simplifile.read(file)
fn check_queries_code(
queries: List(TypedQuery),
actual_code: String,
) -> CheckResult {
let expected_code = query.generate_code(queries, squirrel_version)
compare_code_snippets(actual_code, expected_code)
}

@internal
pub fn compare_code_snippets(
actual_code: String,
expected_code: String,
) -> CheckResult {
let actual_tokens =
glexer.new(actual_code)
|> glexer.discard_comments
|> glexer.discard_whitespace
|> glexer.lex

let expected_code = query.generate_code(queries, squirrel_version)
let expected_tokens =
glexer.new(expected_code)
|> glexer.discard_comments
Expand Down
31 changes: 31 additions & 0 deletions test/squirrel_test.gleam
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import gleam/string
import gleeunit
import pog
import simplifile
import squirrel
import squirrel/internal/database/postgres
import squirrel/internal/error.{type Error}
import squirrel/internal/query.{type TypedQuery}
Expand Down Expand Up @@ -609,6 +610,36 @@ pub fn query_returning_columns_with_same_names_test() {
|> birdie.snap(title: "query returning columns with same names")
}

// --- CHECKING ----------------------------------------------------------------
// Tests for the `check` command.
//

pub fn checking_two_identical_snippets_of_code_test() {
let code = should_codegen("select 1 as number")
let assert squirrel.Same = squirrel.compare_code_snippets(code, code)
}

pub fn if_code_snippets_differ_by_formatting_they_are_the_same_test() {
let expected_code = should_codegen("select 1 as number")
let actual_code = expected_code |> string.replace(each: "\n", with: "\n ")
let assert squirrel.Same =
squirrel.compare_code_snippets(expected_code, actual_code)
}

pub fn if_code_snippets_differ_by_comments_they_are_the_same_test() {
let expected_code = should_codegen("select 1 as number")
let actual_code = "// Comment!\n" <> expected_code
let assert squirrel.Same =
squirrel.compare_code_snippets(expected_code, actual_code)
}

pub fn comparing_different_snippets_of_code_test() {
let expected_code = should_codegen("select 1 as number")
let actual_code = should_codegen("select 2 as number")
let assert squirrel.Different =
squirrel.compare_code_snippets(expected_code, actual_code)
}

// --- REGRESSIONS -------------------------------------------------------------
// Bugs reported from GitHub issues so I make sure those will no longer pop up.
//
Expand Down

0 comments on commit 3a345a1

Please sign in to comment.