Trading card city builder game?

additional tests for other apis

eldridge.cam bf4d3c5e f6c66d6c

verified
+384 -200
+120 -186
generated/schema.sql
··· 20 20 SET row_security = off; 21 21 22 22 -- 23 + -- Name: _sqlx_test; Type: SCHEMA; Schema: -; Owner: - 24 + -- 25 + 26 + CREATE SCHEMA _sqlx_test; 27 + 28 + 29 + -- 23 30 -- Name: citext; Type: EXTENSION; Schema: -; Owner: - 24 31 -- 25 32 ··· 57 64 ); 58 65 59 66 67 + -- 68 + -- Name: database_ids; Type: SEQUENCE; Schema: _sqlx_test; Owner: - 69 + -- 70 + 71 + CREATE SEQUENCE _sqlx_test.database_ids 72 + START WITH 1 73 + INCREMENT BY 1 74 + NO MINVALUE 75 + NO MAXVALUE 76 + CACHE 1; 77 + 78 + 60 79 SET default_tablespace = ''; 61 80 62 81 SET default_table_access_method = heap; 63 82 64 83 -- 84 + -- Name: databases; Type: TABLE; Schema: _sqlx_test; Owner: - 85 + -- 86 + 87 + CREATE TABLE _sqlx_test.databases ( 88 + db_name text NOT NULL, 89 + test_path text NOT NULL, 90 + created_at timestamp with time zone DEFAULT now() NOT NULL 91 + ); 92 + 93 + 94 + -- 65 95 -- Name: accounts; Type: TABLE; Schema: public; Owner: - 66 96 -- 67 97 68 98 CREATE TABLE public.accounts ( 69 99 id public.citext NOT NULL, 70 - CONSTRAINT accounts_id_check CHECK ( 71 - ((0 < length((id)::text)) AND (length((id)::text) <= 64)) 72 - ) 100 + CONSTRAINT accounts_id_check CHECK (((0 < length((id)::text)) AND (length((id)::text) <= 64))) 73 101 ); 74 102 75 103 ··· 104 132 CREATE TABLE public.card_sets ( 105 133 id text NOT NULL, 106 134 release_date timestamp with time zone NOT NULL, 107 - CONSTRAINT card_sets_id_check CHECK ( 108 - ((0 < length(id)) AND (length(id) <= 64)) 109 - ) 135 + CONSTRAINT card_sets_id_check CHECK (((0 < length(id)) AND (length(id) <= 64))) 110 136 ); 111 137 112 138 ··· 125 151 id text NOT NULL, 126 152 card_set_id text DEFAULT 'default'::text NOT NULL, 127 153 class public.card_class NOT NULL, 128 - CONSTRAINT card_types_id_check CHECK ( 129 - ((0 < length(id)) AND (length(id) <= 64)) 130 - ) 154 + CONSTRAINT card_types_id_check CHECK (((0 < length(id)) AND (length(id) <= 64))) 131 155 ); 132 156 133 157 ··· 178 202 name text NOT NULL, 179 203 id bigint NOT NULL, 180 204 home_tile_id bigint, 181 - CONSTRAINT citizens_name_check CHECK ( 182 - ((0 < length(name)) AND (length(name) < 64)) 183 - ) 205 + CONSTRAINT citizens_name_check CHECK (((0 < length(name)) AND (length(name) < 64))) 184 206 ); 185 207 186 208 ··· 239 261 id bigint NOT NULL, 240 262 name text NOT NULL, 241 263 account_id public.citext NOT NULL, 242 - CONSTRAINT fields_name_check CHECK ( 243 - ((0 < length(name)) AND (length(name) <= 64)) 244 - ) 264 + CONSTRAINT fields_name_check CHECK (((0 < length(name)) AND (length(name) <= 64))) 245 265 ); 246 266 247 267 ··· 294 314 start_date timestamp with time zone NOT NULL, 295 315 end_date timestamp with time zone, 296 316 pack_size integer DEFAULT 5 NOT NULL, 297 - CONSTRAINT pack_banners_id_check CHECK ( 298 - ((0 < length(id)) AND (length(id) <= 64)) 299 - ) 317 + CONSTRAINT pack_banners_id_check CHECK (((0 < length(id)) AND (length(id) <= 64))) 300 318 ); 301 319 302 320 ··· 380 398 381 399 CREATE TABLE public.resources ( 382 400 id text NOT NULL, 383 - CONSTRAINT resources_id_check CHECK ( 384 - ((0 < length(id)) AND (length(id) <= 64)) 385 - ) 401 + CONSTRAINT resources_id_check CHECK (((0 < length(id)) AND (length(id) <= 64))) 386 402 ); 387 403 388 404 ··· 399 415 400 416 CREATE TABLE public.species ( 401 417 id text NOT NULL, 402 - class public.card_class GENERATED ALWAYS AS ( 403 - 'citizen'::public.card_class 404 - ) STORED NOT NULL, 405 - CONSTRAINT species_id_check CHECK ( 406 - ((0 < length(id)) AND (length(id) <= 64)) 407 - ) 418 + class public.card_class GENERATED ALWAYS AS ('citizen'::public.card_class) STORED NOT NULL, 419 + CONSTRAINT species_id_check CHECK (((0 < length(id)) AND (length(id) <= 64))) 408 420 ); 409 421 410 422 ··· 478 490 479 491 CREATE TABLE public.tile_types ( 480 492 id text NOT NULL, 481 - class public.card_class GENERATED ALWAYS AS ( 482 - 'tile'::public.card_class 483 - ) STORED NOT NULL, 493 + class public.card_class GENERATED ALWAYS AS ('tile'::public.card_class) STORED NOT NULL, 484 494 category public.tile_category NOT NULL, 485 495 houses integer NOT NULL, 486 496 employs integer NOT NULL ··· 502 512 id bigint NOT NULL, 503 513 tile_type_id text NOT NULL, 504 514 name text NOT NULL, 505 - CONSTRAINT tiles_name_check CHECK ( 506 - ((0 < length(name)) AND (length(name) <= 64)) 507 - ) 515 + CONSTRAINT tiles_name_check CHECK (((0 < length(name)) AND (length(name) <= 64))) 508 516 ); 509 517 510 518 ··· 516 524 517 525 518 526 -- 527 + -- Name: databases databases_pkey; Type: CONSTRAINT; Schema: _sqlx_test; Owner: - 528 + -- 529 + 530 + ALTER TABLE ONLY _sqlx_test.databases 531 + ADD CONSTRAINT databases_pkey PRIMARY KEY (db_name); 532 + 533 + 534 + -- 519 535 -- Name: accounts accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - 520 536 -- 521 537 522 538 ALTER TABLE ONLY public.accounts 523 - ADD CONSTRAINT accounts_pkey PRIMARY KEY (id); 539 + ADD CONSTRAINT accounts_pkey PRIMARY KEY (id); 524 540 525 541 526 542 -- ··· 528 544 -- 529 545 530 546 ALTER TABLE ONLY public.card_accounts 531 - ADD CONSTRAINT card_accounts_card_id_account_id_key UNIQUE ( 532 - card_id, account_id 533 - ); 547 + ADD CONSTRAINT card_accounts_card_id_account_id_key UNIQUE (card_id, account_id); 534 548 535 549 536 550 -- ··· 538 552 -- 539 553 540 554 ALTER TABLE ONLY public.card_accounts 541 - ADD CONSTRAINT card_accounts_pkey PRIMARY KEY (card_id); 555 + ADD CONSTRAINT card_accounts_pkey PRIMARY KEY (card_id); 542 556 543 557 544 558 -- ··· 546 560 -- 547 561 548 562 ALTER TABLE ONLY public.card_sets 549 - ADD CONSTRAINT card_sets_pkey PRIMARY KEY (id); 563 + ADD CONSTRAINT card_sets_pkey PRIMARY KEY (id); 550 564 551 565 552 566 -- ··· 554 568 -- 555 569 556 570 ALTER TABLE ONLY public.card_types 557 - ADD CONSTRAINT card_types_id_class_key UNIQUE (id, class); 571 + ADD CONSTRAINT card_types_id_class_key UNIQUE (id, class); 558 572 559 573 560 574 -- ··· 562 576 -- 563 577 564 578 ALTER TABLE ONLY public.card_types 565 - ADD CONSTRAINT card_types_pkey PRIMARY KEY (id); 579 + ADD CONSTRAINT card_types_pkey PRIMARY KEY (id); 566 580 567 581 568 582 -- ··· 570 584 -- 571 585 572 586 ALTER TABLE ONLY public.cards 573 - ADD CONSTRAINT cards_id_card_type_id_key UNIQUE (id, card_type_id); 587 + ADD CONSTRAINT cards_id_card_type_id_key UNIQUE (id, card_type_id); 574 588 575 589 576 590 -- ··· 578 592 -- 579 593 580 594 ALTER TABLE ONLY public.cards 581 - ADD CONSTRAINT cards_pkey PRIMARY KEY (id); 595 + ADD CONSTRAINT cards_pkey PRIMARY KEY (id); 582 596 583 597 584 598 -- ··· 586 600 -- 587 601 588 602 ALTER TABLE ONLY public.citizens 589 - ADD CONSTRAINT citizens_pkey PRIMARY KEY (id); 603 + ADD CONSTRAINT citizens_pkey PRIMARY KEY (id); 590 604 591 605 592 606 -- ··· 594 608 -- 595 609 596 610 ALTER TABLE ONLY public.field_citizens 597 - ADD CONSTRAINT field_citizens_pkey PRIMARY KEY (citizen_id); 611 + ADD CONSTRAINT field_citizens_pkey PRIMARY KEY (citizen_id); 598 612 599 613 600 614 -- ··· 602 616 -- 603 617 604 618 ALTER TABLE ONLY public.field_tiles 605 - ADD CONSTRAINT field_tiles_pkey PRIMARY KEY (tile_id); 619 + ADD CONSTRAINT field_tiles_pkey PRIMARY KEY (tile_id); 606 620 607 621 608 622 -- ··· 610 624 -- 611 625 612 626 ALTER TABLE ONLY public.fields 613 - ADD CONSTRAINT fields_id_account_id_key UNIQUE (id, account_id); 627 + ADD CONSTRAINT fields_id_account_id_key UNIQUE (id, account_id); 614 628 615 629 616 630 -- ··· 618 632 -- 619 633 620 634 ALTER TABLE ONLY public.fields 621 - ADD CONSTRAINT fields_pkey PRIMARY KEY (id); 635 + ADD CONSTRAINT fields_pkey PRIMARY KEY (id); 622 636 623 637 624 638 -- ··· 626 640 -- 627 641 628 642 ALTER TABLE ONLY public.pack_banner_cards 629 - ADD CONSTRAINT pack_banner_cards_pkey PRIMARY KEY ( 630 - pack_banner_id, card_type_id 631 - ); 643 + ADD CONSTRAINT pack_banner_cards_pkey PRIMARY KEY (pack_banner_id, card_type_id); 632 644 633 645 634 646 -- ··· 636 648 -- 637 649 638 650 ALTER TABLE ONLY public.pack_banners 639 - ADD CONSTRAINT pack_banners_pkey PRIMARY KEY (id); 651 + ADD CONSTRAINT pack_banners_pkey PRIMARY KEY (id); 640 652 641 653 642 654 -- ··· 644 656 -- 645 657 646 658 ALTER TABLE ONLY public.pack_contents 647 - ADD CONSTRAINT pack_contents_pkey PRIMARY KEY (pack_id, "position"); 659 + ADD CONSTRAINT pack_contents_pkey PRIMARY KEY (pack_id, "position"); 648 660 649 661 650 662 -- ··· 652 664 -- 653 665 654 666 ALTER TABLE ONLY public.packs 655 - ADD CONSTRAINT packs_pkey PRIMARY KEY (id); 667 + ADD CONSTRAINT packs_pkey PRIMARY KEY (id); 656 668 657 669 658 670 -- ··· 660 672 -- 661 673 662 674 ALTER TABLE ONLY public.resources 663 - ADD CONSTRAINT resources_pkey PRIMARY KEY (id); 675 + ADD CONSTRAINT resources_pkey PRIMARY KEY (id); 664 676 665 677 666 678 -- ··· 668 680 -- 669 681 670 682 ALTER TABLE ONLY public.species_needs 671 - ADD CONSTRAINT species_needs_pkey PRIMARY KEY (species_id, resource_id); 683 + ADD CONSTRAINT species_needs_pkey PRIMARY KEY (species_id, resource_id); 672 684 673 685 674 686 -- ··· 676 688 -- 677 689 678 690 ALTER TABLE ONLY public.species 679 - ADD CONSTRAINT species_pkey PRIMARY KEY (id); 691 + ADD CONSTRAINT species_pkey PRIMARY KEY (id); 680 692 681 693 682 694 -- ··· 684 696 -- 685 697 686 698 ALTER TABLE ONLY public.tile_type_consumes 687 - ADD CONSTRAINT tile_type_consumes_pkey PRIMARY KEY (tile_type_id, resource_id); 699 + ADD CONSTRAINT tile_type_consumes_pkey PRIMARY KEY (tile_type_id, resource_id); 688 700 689 701 690 702 -- ··· 692 704 -- 693 705 694 706 ALTER TABLE ONLY public.tile_type_produces 695 - ADD CONSTRAINT tile_type_produces_pkey PRIMARY KEY (tile_type_id, resource_id); 707 + ADD CONSTRAINT tile_type_produces_pkey PRIMARY KEY (tile_type_id, resource_id); 696 708 697 709 698 710 -- ··· 700 712 -- 701 713 702 714 ALTER TABLE ONLY public.tile_types 703 - ADD CONSTRAINT tile_types_pkey PRIMARY KEY (id); 715 + ADD CONSTRAINT tile_types_pkey PRIMARY KEY (id); 704 716 705 717 706 718 -- ··· 708 720 -- 709 721 710 722 ALTER TABLE ONLY public.tiles 711 - ADD CONSTRAINT tiles_pkey PRIMARY KEY (id); 723 + ADD CONSTRAINT tiles_pkey PRIMARY KEY (id); 724 + 725 + 726 + -- 727 + -- Name: databases_created_at; Type: INDEX; Schema: _sqlx_test; Owner: - 728 + -- 729 + 730 + CREATE INDEX databases_created_at ON _sqlx_test.databases USING btree (created_at); 712 731 713 732 714 733 -- 715 734 -- Name: card_accounts_account_id_index; Type: INDEX; Schema: public; Owner: - 716 735 -- 717 736 718 - CREATE INDEX card_accounts_account_id_index ON public.card_accounts USING btree ( 719 - account_id 720 - ); 737 + CREATE INDEX card_accounts_account_id_index ON public.card_accounts USING btree (account_id); 721 738 722 739 723 740 -- ··· 725 742 -- 726 743 727 744 ALTER TABLE ONLY public.card_accounts 728 - ADD CONSTRAINT card_accounts_account_id_fkey FOREIGN KEY ( 729 - account_id 730 - ) REFERENCES public.accounts (id) ON UPDATE CASCADE ON DELETE CASCADE; 745 + ADD CONSTRAINT card_accounts_account_id_fkey FOREIGN KEY (account_id) REFERENCES public.accounts(id) ON UPDATE CASCADE ON DELETE CASCADE; 731 746 732 747 733 748 -- ··· 735 750 -- 736 751 737 752 ALTER TABLE ONLY public.card_accounts 738 - ADD CONSTRAINT card_accounts_card_id_fkey FOREIGN KEY ( 739 - card_id 740 - ) REFERENCES public.cards (id) ON UPDATE CASCADE ON DELETE CASCADE; 753 + ADD CONSTRAINT card_accounts_card_id_fkey FOREIGN KEY (card_id) REFERENCES public.cards(id) ON UPDATE CASCADE ON DELETE CASCADE; 741 754 742 755 743 756 -- ··· 745 758 -- 746 759 747 760 ALTER TABLE ONLY public.card_types 748 - ADD CONSTRAINT card_types_card_set_id_fkey FOREIGN KEY ( 749 - card_set_id 750 - ) REFERENCES public.card_sets (id) ON UPDATE CASCADE ON DELETE RESTRICT; 761 + ADD CONSTRAINT card_types_card_set_id_fkey FOREIGN KEY (card_set_id) REFERENCES public.card_sets(id) ON UPDATE CASCADE ON DELETE RESTRICT; 751 762 752 763 753 764 -- ··· 755 766 -- 756 767 757 768 ALTER TABLE ONLY public.cards 758 - ADD CONSTRAINT cards_card_type_id_fkey FOREIGN KEY ( 759 - card_type_id 760 - ) REFERENCES public.card_types (id) ON UPDATE CASCADE ON DELETE RESTRICT; 769 + ADD CONSTRAINT cards_card_type_id_fkey FOREIGN KEY (card_type_id) REFERENCES public.card_types(id) ON UPDATE CASCADE ON DELETE RESTRICT; 761 770 762 771 763 772 -- ··· 765 774 -- 766 775 767 776 ALTER TABLE ONLY public.citizens 768 - ADD CONSTRAINT citizens_home_tile_id_fkey FOREIGN KEY ( 769 - home_tile_id 770 - ) REFERENCES public.tiles (id) ON UPDATE CASCADE ON DELETE SET NULL; 777 + ADD CONSTRAINT citizens_home_tile_id_fkey FOREIGN KEY (home_tile_id) REFERENCES public.tiles(id) ON UPDATE CASCADE ON DELETE SET NULL; 771 778 772 779 773 780 -- ··· 775 782 -- 776 783 777 784 ALTER TABLE ONLY public.citizens 778 - ADD CONSTRAINT citizens_id_fkey FOREIGN KEY (id) REFERENCES public.cards ( 779 - id 780 - ) ON UPDATE CASCADE ON DELETE CASCADE; 785 + ADD CONSTRAINT citizens_id_fkey FOREIGN KEY (id) REFERENCES public.cards(id) ON UPDATE CASCADE ON DELETE CASCADE; 781 786 782 787 783 788 -- ··· 785 790 -- 786 791 787 792 ALTER TABLE ONLY public.citizens 788 - ADD CONSTRAINT citizens_id_species_id_fkey FOREIGN KEY ( 789 - id, species_id 790 - ) REFERENCES public.cards ( 791 - id, card_type_id 792 - ) ON UPDATE CASCADE ON DELETE CASCADE; 793 + ADD CONSTRAINT citizens_id_species_id_fkey FOREIGN KEY (id, species_id) REFERENCES public.cards(id, card_type_id) ON UPDATE CASCADE ON DELETE CASCADE; 793 794 794 795 795 796 -- ··· 797 798 -- 798 799 799 800 ALTER TABLE ONLY public.citizens 800 - ADD CONSTRAINT citizens_species_id_fkey FOREIGN KEY ( 801 - species_id 802 - ) REFERENCES public.species (id) ON UPDATE CASCADE ON DELETE CASCADE; 801 + ADD CONSTRAINT citizens_species_id_fkey FOREIGN KEY (species_id) REFERENCES public.species(id) ON UPDATE CASCADE ON DELETE CASCADE; 803 802 804 803 805 804 -- ··· 807 806 -- 808 807 809 808 ALTER TABLE ONLY public.field_citizens 810 - ADD CONSTRAINT field_citizens_account_id_citizen_id_fkey FOREIGN KEY ( 811 - account_id, citizen_id 812 - ) REFERENCES public.card_accounts ( 813 - account_id, card_id 814 - ) ON UPDATE CASCADE ON DELETE CASCADE; 809 + ADD CONSTRAINT field_citizens_account_id_citizen_id_fkey FOREIGN KEY (account_id, citizen_id) REFERENCES public.card_accounts(account_id, card_id) ON UPDATE CASCADE ON DELETE CASCADE; 815 810 816 811 817 812 -- ··· 819 814 -- 820 815 821 816 ALTER TABLE ONLY public.field_citizens 822 - ADD CONSTRAINT field_citizens_account_id_field_id_fkey FOREIGN KEY ( 823 - account_id, field_id 824 - ) REFERENCES public.fields (account_id, id) ON UPDATE CASCADE ON DELETE CASCADE; 817 + ADD CONSTRAINT field_citizens_account_id_field_id_fkey FOREIGN KEY (account_id, field_id) REFERENCES public.fields(account_id, id) ON UPDATE CASCADE ON DELETE CASCADE; 825 818 826 819 827 820 -- ··· 829 822 -- 830 823 831 824 ALTER TABLE ONLY public.field_citizens 832 - ADD CONSTRAINT field_citizens_account_id_fkey FOREIGN KEY ( 833 - account_id 834 - ) REFERENCES public.accounts (id) ON UPDATE CASCADE ON DELETE CASCADE; 825 + ADD CONSTRAINT field_citizens_account_id_fkey FOREIGN KEY (account_id) REFERENCES public.accounts(id) ON UPDATE CASCADE ON DELETE CASCADE; 835 826 836 827 837 828 -- ··· 839 830 -- 840 831 841 832 ALTER TABLE ONLY public.field_citizens 842 - ADD CONSTRAINT field_citizens_citizen_id_fkey FOREIGN KEY ( 843 - citizen_id 844 - ) REFERENCES public.citizens (id) ON UPDATE CASCADE ON DELETE CASCADE; 833 + ADD CONSTRAINT field_citizens_citizen_id_fkey FOREIGN KEY (citizen_id) REFERENCES public.citizens(id) ON UPDATE CASCADE ON DELETE CASCADE; 845 834 846 835 847 836 -- ··· 849 838 -- 850 839 851 840 ALTER TABLE ONLY public.field_citizens 852 - ADD CONSTRAINT field_citizens_field_id_fkey FOREIGN KEY ( 853 - field_id 854 - ) REFERENCES public.fields (id) ON UPDATE CASCADE ON DELETE CASCADE; 841 + ADD CONSTRAINT field_citizens_field_id_fkey FOREIGN KEY (field_id) REFERENCES public.fields(id) ON UPDATE CASCADE ON DELETE CASCADE; 855 842 856 843 857 844 -- ··· 859 846 -- 860 847 861 848 ALTER TABLE ONLY public.field_tiles 862 - ADD CONSTRAINT field_tiles_account_id_field_id_fkey FOREIGN KEY ( 863 - account_id, field_id 864 - ) REFERENCES public.fields (account_id, id) ON UPDATE CASCADE ON DELETE CASCADE; 849 + ADD CONSTRAINT field_tiles_account_id_field_id_fkey FOREIGN KEY (account_id, field_id) REFERENCES public.fields(account_id, id) ON UPDATE CASCADE ON DELETE CASCADE; 865 850 866 851 867 852 -- ··· 869 854 -- 870 855 871 856 ALTER TABLE ONLY public.field_tiles 872 - ADD CONSTRAINT field_tiles_account_id_fkey FOREIGN KEY ( 873 - account_id 874 - ) REFERENCES public.accounts (id) ON UPDATE CASCADE ON DELETE CASCADE; 857 + ADD CONSTRAINT field_tiles_account_id_fkey FOREIGN KEY (account_id) REFERENCES public.accounts(id) ON UPDATE CASCADE ON DELETE CASCADE; 875 858 876 859 877 860 -- ··· 879 862 -- 880 863 881 864 ALTER TABLE ONLY public.field_tiles 882 - ADD CONSTRAINT field_tiles_account_id_tile_id_fkey FOREIGN KEY ( 883 - account_id, tile_id 884 - ) REFERENCES public.card_accounts ( 885 - account_id, card_id 886 - ) ON UPDATE CASCADE ON DELETE CASCADE; 865 + ADD CONSTRAINT field_tiles_account_id_tile_id_fkey FOREIGN KEY (account_id, tile_id) REFERENCES public.card_accounts(account_id, card_id) ON UPDATE CASCADE ON DELETE CASCADE; 887 866 888 867 889 868 -- ··· 891 870 -- 892 871 893 872 ALTER TABLE ONLY public.field_tiles 894 - ADD CONSTRAINT field_tiles_field_id_fkey FOREIGN KEY ( 895 - field_id 896 - ) REFERENCES public.fields (id) ON UPDATE CASCADE ON DELETE CASCADE; 873 + ADD CONSTRAINT field_tiles_field_id_fkey FOREIGN KEY (field_id) REFERENCES public.fields(id) ON UPDATE CASCADE ON DELETE CASCADE; 897 874 898 875 899 876 -- ··· 901 878 -- 902 879 903 880 ALTER TABLE ONLY public.field_tiles 904 - ADD CONSTRAINT field_tiles_tile_id_fkey FOREIGN KEY ( 905 - tile_id 906 - ) REFERENCES public.tiles (id) ON UPDATE CASCADE ON DELETE CASCADE; 881 + ADD CONSTRAINT field_tiles_tile_id_fkey FOREIGN KEY (tile_id) REFERENCES public.tiles(id) ON UPDATE CASCADE ON DELETE CASCADE; 907 882 908 883 909 884 -- ··· 911 886 -- 912 887 913 888 ALTER TABLE ONLY public.fields 914 - ADD CONSTRAINT fields_account_id_fkey FOREIGN KEY ( 915 - account_id 916 - ) REFERENCES public.accounts (id) ON UPDATE CASCADE ON DELETE CASCADE; 889 + ADD CONSTRAINT fields_account_id_fkey FOREIGN KEY (account_id) REFERENCES public.accounts(id) ON UPDATE CASCADE ON DELETE CASCADE; 917 890 918 891 919 892 -- ··· 921 894 -- 922 895 923 896 ALTER TABLE ONLY public.pack_banner_cards 924 - ADD CONSTRAINT pack_banner_cards_card_type_id_fkey FOREIGN KEY ( 925 - card_type_id 926 - ) REFERENCES public.card_types (id) ON UPDATE CASCADE ON DELETE RESTRICT; 897 + ADD CONSTRAINT pack_banner_cards_card_type_id_fkey FOREIGN KEY (card_type_id) REFERENCES public.card_types(id) ON UPDATE CASCADE ON DELETE RESTRICT; 927 898 928 899 929 900 -- ··· 931 902 -- 932 903 933 904 ALTER TABLE ONLY public.pack_banner_cards 934 - ADD CONSTRAINT pack_banner_cards_pack_banner_id_fkey FOREIGN KEY ( 935 - pack_banner_id 936 - ) REFERENCES public.pack_banners (id) ON UPDATE CASCADE ON DELETE CASCADE; 905 + ADD CONSTRAINT pack_banner_cards_pack_banner_id_fkey FOREIGN KEY (pack_banner_id) REFERENCES public.pack_banners(id) ON UPDATE CASCADE ON DELETE CASCADE; 937 906 938 907 939 908 -- ··· 941 910 -- 942 911 943 912 ALTER TABLE ONLY public.pack_contents 944 - ADD CONSTRAINT pack_contents_card_id_fkey FOREIGN KEY ( 945 - card_id 946 - ) REFERENCES public.cards (id) ON UPDATE CASCADE ON DELETE CASCADE; 913 + ADD CONSTRAINT pack_contents_card_id_fkey FOREIGN KEY (card_id) REFERENCES public.cards(id) ON UPDATE CASCADE ON DELETE CASCADE; 947 914 948 915 949 916 -- ··· 951 918 -- 952 919 953 920 ALTER TABLE ONLY public.pack_contents 954 - ADD CONSTRAINT pack_contents_pack_id_fkey FOREIGN KEY ( 955 - pack_id 956 - ) REFERENCES public.packs (id) ON UPDATE CASCADE ON DELETE CASCADE; 921 + ADD CONSTRAINT pack_contents_pack_id_fkey FOREIGN KEY (pack_id) REFERENCES public.packs(id) ON UPDATE CASCADE ON DELETE CASCADE; 957 922 958 923 959 924 -- ··· 961 926 -- 962 927 963 928 ALTER TABLE ONLY public.packs 964 - ADD CONSTRAINT packs_account_id_fkey FOREIGN KEY ( 965 - account_id 966 - ) REFERENCES public.accounts (id) ON UPDATE CASCADE ON DELETE CASCADE; 929 + ADD CONSTRAINT packs_account_id_fkey FOREIGN KEY (account_id) REFERENCES public.accounts(id) ON UPDATE CASCADE ON DELETE CASCADE; 967 930 968 931 969 932 -- ··· 971 934 -- 972 935 973 936 ALTER TABLE ONLY public.packs 974 - ADD CONSTRAINT packs_pack_banner_id_fkey FOREIGN KEY ( 975 - pack_banner_id 976 - ) REFERENCES public.pack_banners (id) ON UPDATE CASCADE ON DELETE RESTRICT; 937 + ADD CONSTRAINT packs_pack_banner_id_fkey FOREIGN KEY (pack_banner_id) REFERENCES public.pack_banners(id) ON UPDATE CASCADE ON DELETE RESTRICT; 977 938 978 939 979 940 -- ··· 981 942 -- 982 943 983 944 ALTER TABLE ONLY public.species 984 - ADD CONSTRAINT species_id_class_fkey FOREIGN KEY ( 985 - id, class 986 - ) REFERENCES public.card_types (id, class) ON UPDATE RESTRICT ON DELETE CASCADE; 945 + ADD CONSTRAINT species_id_class_fkey FOREIGN KEY (id, class) REFERENCES public.card_types(id, class) ON UPDATE RESTRICT ON DELETE CASCADE; 987 946 988 947 989 948 -- ··· 991 950 -- 992 951 993 952 ALTER TABLE ONLY public.species 994 - ADD CONSTRAINT species_id_fkey FOREIGN KEY (id) REFERENCES public.card_types ( 995 - id 996 - ) ON UPDATE CASCADE ON DELETE CASCADE; 953 + ADD CONSTRAINT species_id_fkey FOREIGN KEY (id) REFERENCES public.card_types(id) ON UPDATE CASCADE ON DELETE CASCADE; 997 954 998 955 999 956 -- ··· 1001 958 -- 1002 959 1003 960 ALTER TABLE ONLY public.species_needs 1004 - ADD CONSTRAINT species_needs_resource_id_fkey FOREIGN KEY ( 1005 - resource_id 1006 - ) REFERENCES public.resources (id) ON UPDATE CASCADE ON DELETE RESTRICT; 961 + ADD CONSTRAINT species_needs_resource_id_fkey FOREIGN KEY (resource_id) REFERENCES public.resources(id) ON UPDATE CASCADE ON DELETE RESTRICT; 1007 962 1008 963 1009 964 -- ··· 1011 966 -- 1012 967 1013 968 ALTER TABLE ONLY public.species_needs 1014 - ADD CONSTRAINT species_needs_species_id_fkey FOREIGN KEY ( 1015 - species_id 1016 - ) REFERENCES public.species (id) ON UPDATE CASCADE ON DELETE CASCADE; 969 + ADD CONSTRAINT species_needs_species_id_fkey FOREIGN KEY (species_id) REFERENCES public.species(id) ON UPDATE CASCADE ON DELETE CASCADE; 1017 970 1018 971 1019 972 -- ··· 1021 974 -- 1022 975 1023 976 ALTER TABLE ONLY public.tile_type_consumes 1024 - ADD CONSTRAINT tile_type_consumes_resource_id_fkey FOREIGN KEY ( 1025 - resource_id 1026 - ) REFERENCES public.resources (id) ON UPDATE CASCADE ON DELETE RESTRICT; 977 + ADD CONSTRAINT tile_type_consumes_resource_id_fkey FOREIGN KEY (resource_id) REFERENCES public.resources(id) ON UPDATE CASCADE ON DELETE RESTRICT; 1027 978 1028 979 1029 980 -- ··· 1031 982 -- 1032 983 1033 984 ALTER TABLE ONLY public.tile_type_consumes 1034 - ADD CONSTRAINT tile_type_consumes_tile_type_id_fkey FOREIGN KEY ( 1035 - tile_type_id 1036 - ) REFERENCES public.tile_types (id) ON UPDATE CASCADE ON DELETE CASCADE; 985 + ADD CONSTRAINT tile_type_consumes_tile_type_id_fkey FOREIGN KEY (tile_type_id) REFERENCES public.tile_types(id) ON UPDATE CASCADE ON DELETE CASCADE; 1037 986 1038 987 1039 988 -- ··· 1041 990 -- 1042 991 1043 992 ALTER TABLE ONLY public.tile_type_produces 1044 - ADD CONSTRAINT tile_type_produces_resource_id_fkey FOREIGN KEY ( 1045 - resource_id 1046 - ) REFERENCES public.resources (id) ON UPDATE CASCADE ON DELETE RESTRICT; 993 + ADD CONSTRAINT tile_type_produces_resource_id_fkey FOREIGN KEY (resource_id) REFERENCES public.resources(id) ON UPDATE CASCADE ON DELETE RESTRICT; 1047 994 1048 995 1049 996 -- ··· 1051 998 -- 1052 999 1053 1000 ALTER TABLE ONLY public.tile_type_produces 1054 - ADD CONSTRAINT tile_type_produces_tile_type_id_fkey FOREIGN KEY ( 1055 - tile_type_id 1056 - ) REFERENCES public.tile_types (id) ON UPDATE CASCADE ON DELETE CASCADE; 1001 + ADD CONSTRAINT tile_type_produces_tile_type_id_fkey FOREIGN KEY (tile_type_id) REFERENCES public.tile_types(id) ON UPDATE CASCADE ON DELETE CASCADE; 1057 1002 1058 1003 1059 1004 -- ··· 1061 1006 -- 1062 1007 1063 1008 ALTER TABLE ONLY public.tile_types 1064 - ADD CONSTRAINT tile_types_id_class_fkey FOREIGN KEY ( 1065 - id, class 1066 - ) REFERENCES public.card_types (id, class) ON UPDATE RESTRICT ON DELETE CASCADE; 1009 + ADD CONSTRAINT tile_types_id_class_fkey FOREIGN KEY (id, class) REFERENCES public.card_types(id, class) ON UPDATE RESTRICT ON DELETE CASCADE; 1067 1010 1068 1011 1069 1012 -- ··· 1071 1014 -- 1072 1015 1073 1016 ALTER TABLE ONLY public.tile_types 1074 - ADD CONSTRAINT tile_types_id_fkey FOREIGN KEY ( 1075 - id 1076 - ) REFERENCES public.card_types (id) ON UPDATE CASCADE ON DELETE CASCADE; 1017 + ADD CONSTRAINT tile_types_id_fkey FOREIGN KEY (id) REFERENCES public.card_types(id) ON UPDATE CASCADE ON DELETE CASCADE; 1077 1018 1078 1019 1079 1020 -- ··· 1081 1022 -- 1082 1023 1083 1024 ALTER TABLE ONLY public.tiles 1084 - ADD CONSTRAINT tiles_id_fkey FOREIGN KEY (id) REFERENCES public.cards ( 1085 - id 1086 - ) ON UPDATE CASCADE ON DELETE CASCADE; 1025 + ADD CONSTRAINT tiles_id_fkey FOREIGN KEY (id) REFERENCES public.cards(id) ON UPDATE CASCADE ON DELETE CASCADE; 1087 1026 1088 1027 1089 1028 -- ··· 1091 1030 -- 1092 1031 1093 1032 ALTER TABLE ONLY public.tiles 1094 - ADD CONSTRAINT tiles_id_tile_type_id_fkey FOREIGN KEY ( 1095 - id, tile_type_id 1096 - ) REFERENCES public.cards ( 1097 - id, card_type_id 1098 - ) ON UPDATE CASCADE ON DELETE CASCADE; 1033 + ADD CONSTRAINT tiles_id_tile_type_id_fkey FOREIGN KEY (id, tile_type_id) REFERENCES public.cards(id, card_type_id) ON UPDATE CASCADE ON DELETE CASCADE; 1099 1034 1100 1035 1101 1036 -- ··· 1103 1038 -- 1104 1039 1105 1040 ALTER TABLE ONLY public.tiles 1106 - ADD CONSTRAINT tiles_tile_type_id_fkey FOREIGN KEY ( 1107 - tile_type_id 1108 - ) REFERENCES public.tile_types (id) ON UPDATE CASCADE ON DELETE RESTRICT; 1041 + ADD CONSTRAINT tiles_tile_type_id_fkey FOREIGN KEY (tile_type_id) REFERENCES public.tile_types(id) ON UPDATE CASCADE ON DELETE RESTRICT; 1109 1042 1110 1043 1111 1044 -- ··· 1113 1046 -- 1114 1047 1115 1048 \unrestrict aa4b4bc410c5cacbd97fc326d0f62806 1049 +
+1 -1
packages/cartography/fixtures/seed.sql
··· 47 47 VALUES 48 48 ('default', '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z'), 49 49 ('base-standard', '2026-01-01T00:00:00Z', NULL), 50 - ('halloween-2026', '2026-10-01T00:00:00Z', '2026-10-31T23:59:59Z') 50 + ('upcoming-holiday', now() + '30 days'::interval, now() + '37 days'::interval) 51 51 ON CONFLICT (id) DO UPDATE 52 52 SET start_date = excluded.start_date, 53 53 end_date = excluded.end_date;
+6 -5
packages/cartography/src/api/errors/mod.rs
··· 36 36 } 37 37 38 38 #[derive(utoipa::ToSchema)] 39 - #[expect( 39 + #[cfg_attr(test, derive(serde::Deserialize))] 40 + #[allow( 40 41 dead_code, 41 - reason = "this is a stub type used for OpenAPI schema generation only" 42 + reason = "this is a stub type used for OpenAPI schema generation and tests" 42 43 )] 43 44 pub struct ErrorDetailResponse { 44 - code: &'static str, 45 - message: String, 46 - detail: Value, 45 + pub code: String, 46 + pub message: String, 47 + pub detail: Value, 47 48 } 48 49 49 50 impl<T: ApiError> IntoResponse for JsonError<T> {
+89
packages/cartography/src/api/operations/get_banner.rs
··· 6 6 use axum::extract::Path; 7 7 8 8 #[derive(serde::Serialize, utoipa::ToSchema)] 9 + #[cfg_attr(test, derive(serde::Deserialize))] 9 10 pub struct GetBannerResponse { 10 11 banner: PackBanner, 11 12 banner_cards: Vec<PackBannerCard>, ··· 74 75 banner_cards: row.distribution.unwrap().0, 75 76 })) 76 77 } 78 + 79 + #[cfg(test)] 80 + mod tests { 81 + use crate::api::errors::{ApiError, BannerNotFoundError, ErrorDetailResponse}; 82 + use crate::test::prelude::*; 83 + use axum::http::Request; 84 + use axum::{body::Body, http::StatusCode}; 85 + use sqlx::PgPool; 86 + use time::{Date, Month, OffsetDateTime, Time}; 87 + 88 + use super::GetBannerResponse; 89 + 90 + #[sqlx::test( 91 + migrator = "MIGRATOR", 92 + fixtures(path = "../../../fixtures", scripts("seed")) 93 + )] 94 + async fn get_banner_ok(pool: PgPool) { 95 + let app = crate::app::Config::test(pool).into_router(); 96 + 97 + let request = Request::get("/api/v1/banners/base-standard") 98 + .body(Body::empty()) 99 + .unwrap(); 100 + 101 + let Ok(response) = app.oneshot(request).await; 102 + assert_success!(response); 103 + 104 + let response: GetBannerResponse = response.json().await.unwrap(); 105 + assert_eq!(response.banner.id, "base-standard"); 106 + assert_eq!( 107 + response.banner.start_date, 108 + OffsetDateTime::new_utc( 109 + Date::from_calendar_date(2026, Month::January, 1).unwrap(), 110 + Time::MIDNIGHT, 111 + ) 112 + ); 113 + assert_eq!(response.banner.end_date, None); 114 + assert_eq!(response.banner_cards.len(), 14); 115 + } 116 + 117 + #[sqlx::test( 118 + migrator = "MIGRATOR", 119 + fixtures(path = "../../../fixtures", scripts("seed")) 120 + )] 121 + async fn get_banner_done(pool: PgPool) { 122 + let app = crate::app::Config::test(pool).into_router(); 123 + 124 + let request = Request::get("/api/v1/banners/default").empty().unwrap(); 125 + 126 + let Ok(response) = app.oneshot(request).await; 127 + assert_success!(response); 128 + 129 + let response: GetBannerResponse = response.json().await.unwrap(); 130 + assert_eq!(response.banner.id, "default"); 131 + assert!(response.banner_cards.is_empty()); 132 + } 133 + 134 + #[sqlx::test( 135 + migrator = "MIGRATOR", 136 + fixtures(path = "../../../fixtures", scripts("seed")) 137 + )] 138 + async fn get_banner_upcoming(pool: PgPool) { 139 + let app = crate::app::Config::test(pool).into_router(); 140 + 141 + let request = Request::get("/api/v1/banners/upcoming-holiday") 142 + .empty() 143 + .unwrap(); 144 + 145 + let Ok(response) = app.oneshot(request).await; 146 + assert_success!(response); 147 + 148 + let response: GetBannerResponse = response.json().await.unwrap(); 149 + assert_eq!(response.banner.id, "upcoming-holiday"); 150 + assert!(response.banner_cards.is_empty()); 151 + } 152 + 153 + #[sqlx::test(migrator = "MIGRATOR")] 154 + async fn get_banner_not_found(pool: PgPool) { 155 + let app = crate::app::Config::test(pool).into_router(); 156 + 157 + let request = Request::get("/api/v1/banners/fake-banner").empty().unwrap(); 158 + 159 + let Ok(response) = app.oneshot(request).await; 160 + assert_eq!(response.status(), StatusCode::NOT_FOUND); 161 + 162 + let response: ErrorDetailResponse = response.json().await.unwrap(); 163 + assert_eq!(response.code, BannerNotFoundError::CODE); 164 + } 165 + }
+114
packages/cartography/src/api/operations/list_banners.rs
··· 3 3 use axum::Json; 4 4 5 5 #[derive(serde::Serialize, utoipa::ToSchema)] 6 + #[cfg_attr(test, derive(serde::Deserialize))] 6 7 pub struct ListBannersResponse { 7 8 banners: Vec<PackBanner>, 8 9 } ··· 12 13 } 13 14 14 15 #[derive(serde::Deserialize, utoipa::ToSchema)] 16 + #[cfg_attr(test, derive(serde::Serialize))] 15 17 #[schema(default)] 16 18 pub struct ListBannersRequest { 17 19 #[serde(default = "default_active")] ··· 82 84 83 85 Ok(Json(ListBannersResponse { banners })) 84 86 } 87 + 88 + #[cfg(test)] 89 + mod tests { 90 + use crate::test::prelude::*; 91 + use axum::body::Body; 92 + use axum::http::Request; 93 + use sqlx::PgPool; 94 + 95 + use super::{ListBannersRequest, ListBannersResponse, Status}; 96 + 97 + #[sqlx::test( 98 + migrator = "MIGRATOR", 99 + fixtures(path = "../../../fixtures", scripts("seed")) 100 + )] 101 + async fn list_banners_default_active(pool: PgPool) { 102 + let app = crate::app::Config::test(pool).into_router(); 103 + 104 + let request = Request::post("/api/v1/banners") 105 + .body(Body::empty()) 106 + .unwrap(); 107 + 108 + let Ok(response) = app.oneshot(request).await; 109 + assert_success!(response); 110 + 111 + let response: ListBannersResponse = response.json().await.unwrap(); 112 + assert_eq!(response.banners.len(), 1); 113 + assert_eq!(response.banners[0].id, "base-standard"); 114 + } 115 + 116 + #[sqlx::test( 117 + migrator = "MIGRATOR", 118 + fixtures(path = "../../../fixtures", scripts("seed")) 119 + )] 120 + async fn list_banners_all(pool: PgPool) { 121 + let app = crate::app::Config::test(pool).into_router(); 122 + 123 + let request = Request::post("/api/v1/banners") 124 + .json(ListBannersRequest { 125 + status: vec![Status::Done, Status::Active, Status::Upcoming], 126 + }) 127 + .unwrap(); 128 + 129 + let Ok(response) = app.oneshot(request).await; 130 + assert_success!(response); 131 + 132 + let response: ListBannersResponse = response.json().await.unwrap(); 133 + assert_eq!(response.banners.len(), 3); 134 + assert_eq!(response.banners[0].id, "default"); 135 + assert_eq!(response.banners[1].id, "base-standard"); 136 + assert_eq!(response.banners[2].id, "upcoming-holiday"); 137 + } 138 + 139 + #[sqlx::test( 140 + migrator = "MIGRATOR", 141 + fixtures(path = "../../../fixtures", scripts("seed")) 142 + )] 143 + async fn list_banners_done(pool: PgPool) { 144 + let app = crate::app::Config::test(pool).into_router(); 145 + 146 + let request = Request::post("/api/v1/banners") 147 + .json(ListBannersRequest { 148 + status: vec![Status::Done], 149 + }) 150 + .unwrap(); 151 + 152 + let Ok(response) = app.oneshot(request).await; 153 + assert_success!(response); 154 + 155 + let response: ListBannersResponse = response.json().await.unwrap(); 156 + assert_eq!(response.banners.len(), 1); 157 + assert_eq!(response.banners[0].id, "default"); 158 + } 159 + 160 + #[sqlx::test( 161 + migrator = "MIGRATOR", 162 + fixtures(path = "../../../fixtures", scripts("seed")) 163 + )] 164 + async fn list_banners_upcoming(pool: PgPool) { 165 + let app = crate::app::Config::test(pool).into_router(); 166 + 167 + let request = Request::post("/api/v1/banners") 168 + .json(ListBannersRequest { 169 + status: vec![Status::Upcoming], 170 + }) 171 + .unwrap(); 172 + 173 + let Ok(response) = app.oneshot(request).await; 174 + assert_success!(response); 175 + 176 + let response: ListBannersResponse = response.json().await.unwrap(); 177 + assert_eq!(response.banners.len(), 1); 178 + assert_eq!(response.banners[0].id, "upcoming-holiday"); 179 + } 180 + 181 + #[sqlx::test( 182 + migrator = "MIGRATOR", 183 + fixtures(path = "../../../fixtures", scripts("seed")) 184 + )] 185 + async fn list_banners_none(pool: PgPool) { 186 + let app = crate::app::Config::test(pool).into_router(); 187 + 188 + let request = Request::post("/api/v1/banners") 189 + .json(ListBannersRequest { status: vec![] }) 190 + .unwrap(); 191 + 192 + let Ok(response) = app.oneshot(request).await; 193 + assert_success!(response); 194 + 195 + let response: ListBannersResponse = response.json().await.unwrap(); 196 + assert!(response.banners.is_empty()); 197 + } 198 + }
+29
packages/cartography/src/api/operations/list_card_types.rs
··· 3 3 use axum::Json; 4 4 5 5 #[derive(serde::Serialize, utoipa::ToSchema)] 6 + #[cfg_attr(test, derive(serde::Deserialize))] 6 7 pub struct ListCardTypesResponse { 7 8 card_types: Vec<CardType>, 8 9 } ··· 57 58 .collect(); 58 59 Ok(Json(ListCardTypesResponse { card_types })) 59 60 } 61 + 62 + #[cfg(test)] 63 + mod tests { 64 + use crate::test::prelude::*; 65 + use axum::body::Body; 66 + use axum::http::Request; 67 + use sqlx::PgPool; 68 + 69 + use super::ListCardTypesResponse; 70 + 71 + #[sqlx::test( 72 + migrator = "MIGRATOR", 73 + fixtures(path = "../../../fixtures", scripts("seed")) 74 + )] 75 + async fn get_banner_ok(pool: PgPool) { 76 + let app = crate::app::Config::test(pool).into_router(); 77 + 78 + let request = Request::get("/api/v1/cardtypes") 79 + .body(Body::empty()) 80 + .unwrap(); 81 + 82 + let Ok(response) = app.oneshot(request).await; 83 + assert_success!(response); 84 + 85 + let response: ListCardTypesResponse = response.json().await.unwrap(); 86 + assert_eq!(response.card_types.len(), 14); 87 + } 88 + }
+6 -7
packages/cartography/src/api/operations/pull_banner.rs
··· 186 186 #[cfg(test)] 187 187 mod tests { 188 188 use crate::test::prelude::*; 189 - use axum::body::Body; 190 189 use axum::http::{Request, StatusCode}; 191 190 use sqlx::PgPool; 192 191 ··· 201 200 202 201 let request = Request::post("/api/v1/banners/base-standard/pull") 203 202 .header("Authorization", "Trust foxfriends") 204 - .body(Body::empty()) 203 + .empty() 205 204 .unwrap(); 206 205 207 206 let Ok(response) = app.oneshot(request).await; ··· 223 222 224 223 let request = Request::post("/api/v1/banners/fake-banner/pull") 225 224 .header("Authorization", "Trust foxfriends") 226 - .body(Body::empty()) 225 + .empty() 227 226 .unwrap(); 228 227 229 228 let Ok(response) = app.oneshot(request).await; ··· 239 238 240 239 let request = Request::post("/api/v1/banners/future-banner/pull") 241 240 .header("Authorization", "Trust foxfriends") 242 - .body(Body::empty()) 241 + .empty() 243 242 .unwrap(); 244 243 245 244 let Ok(response) = app.oneshot(request).await; ··· 255 254 256 255 let request = Request::post("/api/v1/banners/past-banner/pull") 257 256 .header("Authorization", "Trust foxfriends") 258 - .body(Body::empty()) 257 + .empty() 259 258 .unwrap(); 260 259 261 260 let Ok(response) = app.oneshot(request).await; ··· 271 270 272 271 let request = Request::post("/api/v1/banners/empty-banner/pull") 273 272 .header("Authorization", "Trust foxfriends") 274 - .body(Body::empty()) 273 + .empty() 275 274 .unwrap(); 276 275 277 276 let Ok(response) = app.oneshot(request).await; ··· 286 285 let app = crate::app::Config::test(pool).into_router(); 287 286 288 287 let request = Request::post("/api/v1/banners/base-standard/pull") 289 - .body(Body::empty()) 288 + .empty() 290 289 .unwrap(); 291 290 292 291 let Ok(response) = app.oneshot(request).await;
+19 -1
packages/cartography/src/test.rs
··· 1 + use axum::{body::Body, http::Request}; 1 2 use http_body_util::BodyExt; 2 3 3 4 pub trait ResponseExt { ··· 19 20 } 20 21 } 21 22 23 + pub trait RequestExt { 24 + fn empty(self) -> axum::http::Result<Request<Body>>; 25 + fn json<T: serde::Serialize>(self, body: T) -> axum::http::Result<Request<Body>>; 26 + } 27 + 28 + impl RequestExt for axum::http::request::Builder { 29 + fn empty(self) -> axum::http::Result<Request<Body>> { 30 + self.body(Body::empty()) 31 + } 32 + 33 + fn json<T: serde::Serialize>(self, body: T) -> axum::http::Result<Request<Body>> { 34 + let body = serde_json::to_string(&body).unwrap(); 35 + self.header("Content-Type", "application/json") 36 + .body(Body::from(body)) 37 + } 38 + } 39 + 22 40 macro_rules! assert_success { 23 41 ($response:expr) => { 24 42 assert!( ··· 35 53 pub(crate) use assert_success; 36 54 37 55 pub mod prelude { 38 - pub use super::ResponseExt as _; 56 + pub use super::{RequestExt as _, ResponseExt as _}; 39 57 pub use tower::ServiceExt as _; 40 58 41 59 pub const MIGRATOR: sqlx::migrate::Migrator =