|
592 | 592 | end |
593 | 593 |
|
594 | 594 | describe "#validate_types" do |
595 | | - let(:data) do |
596 | | - [ |
597 | | - id: 1, |
598 | | - string: nil, |
599 | | - datetime: "string", |
600 | | - integer: 10.5, |
601 | | - decimal: "string", |
602 | | - array: "string", |
603 | | - boolean: "string", |
604 | | - version: 123.456, |
| 595 | + shared_examples "returns success" do |field, value| |
| 596 | + context "with #{value}" do |
| 597 | + specify do |
| 598 | + result = types_test.validate_types([id: 1, field => value]) |
| 599 | + expect(result).to be_nil |
| 600 | + end |
| 601 | + end |
| 602 | + end |
| 603 | + |
| 604 | + shared_examples "returns error" do |field, value, got| |
| 605 | + context "with #{value}" do |
| 606 | + specify do |
| 607 | + result = types_test.validate_types([id: 1, field => value]) |
| 608 | + expect(result[field]).to include("got: #{got}") |
| 609 | + end |
| 610 | + end |
| 611 | + end |
| 612 | + |
| 613 | + context "Decimal" do |
| 614 | + values = ["1.5", 1.5, 1, "-1.567", BigDecimal("1.5"), Time.current] |
| 615 | + values.each do |value| |
| 616 | + it_behaves_like "returns success", :decimal, value |
| 617 | + end |
| 618 | + |
| 619 | + it_behaves_like "returns error", :decimal, {}, "Hash" |
| 620 | + it_behaves_like "returns error", :decimal, [], "Array" |
| 621 | + it_behaves_like "returns error", :decimal, "test", "String" |
| 622 | + it_behaves_like "returns error", :decimal, true, "TrueClass" |
| 623 | + end |
| 624 | + |
| 625 | + context "DateTime" do |
| 626 | + values = [ |
| 627 | + "01.01.2010", |
| 628 | + Time.current, Date.current, DateTime.current, |
| 629 | + Sequel::SQLTime.date, |
| 630 | + 123, 123.5, BigDecimal("123.5") |
605 | 631 | ] |
| 632 | + values.each do |value| |
| 633 | + it_behaves_like "returns success", :datetime, value |
| 634 | + end |
| 635 | + |
| 636 | + it_behaves_like "returns error", :datetime, {}, "Hash" |
| 637 | + it_behaves_like "returns error", :datetime, [], "Array" |
| 638 | + it_behaves_like "returns error", :datetime, "test", "String" |
| 639 | + it_behaves_like "returns error", :datetime, true, "TrueClass" |
| 640 | + it_behaves_like "returns error", :datetime, 0, "Integer" |
| 641 | + it_behaves_like "returns error", :datetime, 0.1, "Float" |
606 | 642 | end |
607 | | - let(:error) do |
608 | | - { |
609 | | - integer: "expected Integer, got: Float", |
610 | | - decimal: "expected Decimal, got: String", |
611 | | - boolean: "expected Boolean, got: String", |
612 | | - } |
| 643 | + |
| 644 | + context "Boolean" do |
| 645 | + values = [ |
| 646 | + true, false, |
| 647 | + 0, 1, |
| 648 | + "true", "false", "TRUE", "False", "tRuE", "t", "f", "on", "off", "0", "1" |
| 649 | + ] |
| 650 | + values.each do |value| |
| 651 | + it_behaves_like "returns success", :boolean, value |
| 652 | + end |
| 653 | + |
| 654 | + it_behaves_like "returns error", :boolean, {}, "Hash" |
| 655 | + it_behaves_like "returns error", :boolean, [], "Array" |
| 656 | + it_behaves_like "returns error", :boolean, "test", "String" |
| 657 | + it_behaves_like "returns error", :boolean, 10, "Integer" |
| 658 | + it_behaves_like "returns error", :boolean, -1, "Integer" |
| 659 | + it_behaves_like "returns error", :boolean, 1.5, "Float" |
| 660 | + it_behaves_like "returns error", :boolean, Time.current, "Time" |
613 | 661 | end |
614 | 662 |
|
615 | | - it "raises TableSync::DataError" do |
616 | | - result = types_test.validate_types(data) |
617 | | - expect(result).to eq(error) |
| 663 | + context "String" do |
| 664 | + values = [ |
| 665 | + true, false, |
| 666 | + "asfdnk", "1.5", "-1", "t", "f", :test, |
| 667 | + BigDecimal(45435), 1, 1.5, -1, 0, |
| 668 | + Time.current, Sequel::SQLTime.date |
| 669 | + ] |
| 670 | + values.each do |value| |
| 671 | + it_behaves_like "returns success", :string, value |
| 672 | + end |
| 673 | + |
| 674 | + it_behaves_like "returns error", :string, {}, "Hash" |
| 675 | + it_behaves_like "returns error", :string, [], "Array" |
| 676 | + it_behaves_like "returns error", :string, String, "Class" |
618 | 677 | end |
619 | 678 | end |
620 | 679 |
|
|
0 commit comments