|
1 | 1 | package filter_test
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "database/sql" |
4 | 5 | "fmt"
|
5 | 6 | "reflect"
|
6 | 7 | "testing"
|
7 | 8 |
|
8 | 9 | "github.com/poki/mongodb-filter-to-postgres/filter"
|
9 | 10 | )
|
10 | 11 |
|
| 12 | +func ExampleNewConverter() { |
| 13 | + // Remeber to use `filter.WithArrayDriver(pg.Array)` when using github.com/lib/pq |
| 14 | + converter := filter.NewConverter(filter.WithNestedJSONB("meta", "created_at", "updated_at")) |
| 15 | + |
| 16 | + mongoFilterQuery := `{ |
| 17 | + "name": "John", |
| 18 | + "created_at": { |
| 19 | + "$gte": "2020-01-01T00:00:00Z" |
| 20 | + } |
| 21 | + }` |
| 22 | + conditions, values, err := converter.Convert([]byte(mongoFilterQuery), 1) |
| 23 | + if err != nil { |
| 24 | + // handle error |
| 25 | + } |
| 26 | + |
| 27 | + var db *sql.DB // setup your database connection |
| 28 | + |
| 29 | + _, _ = db.Query("SELECT * FROM users WHERE "+conditions, values) |
| 30 | + // SELECT * FROM users WHERE (("created_at" >= $1) AND ("meta"->>'name' = $2)), 2020-01-01T00:00:00Z, "John" |
| 31 | +} |
| 32 | + |
11 | 33 | func TestConverter_Convert(t *testing.T) {
|
12 | 34 | tests := []struct {
|
13 | 35 | name string
|
@@ -402,3 +424,39 @@ func TestConverter_WithEmptyCondition(t *testing.T) {
|
402 | 424 | t.Errorf("Converter.Convert() values = %v, want nil", values)
|
403 | 425 | }
|
404 | 426 | }
|
| 427 | + |
| 428 | +func TestConverter_NoConstructor(t *testing.T) { |
| 429 | + c := &filter.Converter{} |
| 430 | + conditions, values, err := c.Convert([]byte(`{"name": "John"}`), 1) |
| 431 | + if err != nil { |
| 432 | + t.Fatal(err) |
| 433 | + } |
| 434 | + if want := `("name" = $1)`; conditions != want { |
| 435 | + t.Errorf("Converter.Convert() conditions = %v, want %v", conditions, want) |
| 436 | + } |
| 437 | + if !reflect.DeepEqual(values, []any{"John"}) { |
| 438 | + t.Errorf("Converter.Convert() values = %v, want %v", values, []any{"John"}) |
| 439 | + } |
| 440 | + |
| 441 | + conditions, values, err = c.Convert([]byte(``), 1) |
| 442 | + if err != nil { |
| 443 | + t.Fatal(err) |
| 444 | + } |
| 445 | + if want := "FALSE"; conditions != want { |
| 446 | + t.Errorf("Converter.Convert() conditions = %v, want %v", conditions, want) |
| 447 | + } |
| 448 | + if len(values) != 0 { |
| 449 | + t.Errorf("Converter.Convert() values = %v, want nil", values) |
| 450 | + } |
| 451 | +} |
| 452 | + |
| 453 | +func TestConverter_CopyReference(t *testing.T) { |
| 454 | + c := filter.Converter{} |
| 455 | + conditions, _, err := c.Convert([]byte(``), 1) |
| 456 | + if err != nil { |
| 457 | + t.Fatal(err) |
| 458 | + } |
| 459 | + if want := "FALSE"; conditions != want { |
| 460 | + t.Errorf("Converter.Convert() conditions = %v, want %v", conditions, want) |
| 461 | + } |
| 462 | +} |
0 commit comments