|
26 | 26 | import javax.persistence.Query;
|
27 | 27 | import javax.transaction.Transactional;
|
28 | 28 |
|
| 29 | +import com.introproventures.graphql.jpa.query.schema.impl.GraphQLJpaExecutor; |
| 30 | +import com.introproventures.graphql.jpa.query.schema.impl.GraphQLJpaSchemaBuilder; |
29 | 31 | import org.junit.Test;
|
30 | 32 | import org.junit.runner.RunWith;
|
31 | 33 | import org.springframework.beans.factory.annotation.Autowired;
|
|
35 | 37 | import org.springframework.test.context.TestPropertySource;
|
36 | 38 | import org.springframework.test.context.junit4.SpringRunner;
|
37 | 39 |
|
38 |
| -import com.introproventures.graphql.jpa.query.schema.impl.GraphQLJpaExecutor; |
39 |
| -import com.introproventures.graphql.jpa.query.schema.impl.GraphQLJpaSchemaBuilder; |
40 |
| - |
41 | 40 | @RunWith(SpringRunner.class)
|
42 | 41 | @SpringBootTest
|
43 | 42 | @TestPropertySource({"classpath:hibernate.properties"})
|
@@ -740,15 +739,134 @@ public void queryWithWhereInsideOneToManyRelations() {
|
740 | 739 | "}";
|
741 | 740 |
|
742 | 741 | String expected = "{Humans={select=["
|
743 |
| - + "{id=1000, name=Luke Skywalker, favoriteDroid={name=C-3PO}, friends=[{name=C-3PO, appearsIn=[A_NEW_HOPE]}, {name=Han Solo, appearsIn=[A_NEW_HOPE]}, {name=Leia Organa, appearsIn=[A_NEW_HOPE]}, {name=R2-D2, appearsIn=[A_NEW_HOPE]}]}, " |
744 |
| - + "{id=1001, name=Darth Vader, favoriteDroid={name=R2-D2}, friends=[{name=Wilhuff Tarkin, appearsIn=[A_NEW_HOPE]}]}" |
| 742 | + + "{id=1000, name=Luke Skywalker, favoriteDroid={name=C-3PO}, friends=[" |
| 743 | + + "{name=C-3PO, appearsIn=[A_NEW_HOPE]}, " |
| 744 | + + "{name=Han Solo, appearsIn=[A_NEW_HOPE]}, " |
| 745 | + + "{name=Leia Organa, appearsIn=[A_NEW_HOPE]}, " |
| 746 | + + "{name=R2-D2, appearsIn=[A_NEW_HOPE]}" |
| 747 | + + "]}, " |
| 748 | + + "{id=1001, name=Darth Vader, favoriteDroid={name=R2-D2}, friends=[" |
| 749 | + + "{name=Wilhuff Tarkin, appearsIn=[A_NEW_HOPE]}" |
| 750 | + + "]}, " |
| 751 | + + "{id=1002, name=Han Solo, favoriteDroid=null, friends=[" |
| 752 | + + "{name=Leia Organa, appearsIn=[A_NEW_HOPE]}, " |
| 753 | + + "{name=Luke Skywalker, appearsIn=[A_NEW_HOPE]}, " |
| 754 | + + "{name=R2-D2, appearsIn=[A_NEW_HOPE]}" |
| 755 | + + "]}, " |
| 756 | + + "{id=1003, name=Leia Organa, favoriteDroid=null, friends=[" |
| 757 | + + "{name=C-3PO, appearsIn=[A_NEW_HOPE]}, " |
| 758 | + + "{name=Han Solo, appearsIn=[A_NEW_HOPE]}, " |
| 759 | + + "{name=Luke Skywalker, appearsIn=[A_NEW_HOPE]}, " |
| 760 | + + "{name=R2-D2, appearsIn=[A_NEW_HOPE]}" |
| 761 | + + "]}, " |
| 762 | + + "{id=1004, name=Wilhuff Tarkin, favoriteDroid=null, friends=[" |
| 763 | + + "{name=Darth Vader, appearsIn=[A_NEW_HOPE]}" |
| 764 | + + "]}" |
745 | 765 | + "]}}";
|
746 | 766 |
|
747 | 767 | //when:
|
748 | 768 | Object result = executor.execute(query).getData();
|
749 | 769 |
|
750 | 770 | //then:
|
751 | 771 | assertThat(result.toString()).isEqualTo(expected);
|
752 |
| - } |
| 772 | + } |
| 773 | + |
| 774 | + @Test |
| 775 | + public void queryWithWhereInsideOneToManyRelationsShouldApplyFilterCriterias() { |
| 776 | + //given: |
| 777 | + String query = "query { " |
| 778 | + + " Humans(where: {" |
| 779 | + + "friends: {appearsIn: {IN: A_NEW_HOPE}} " |
| 780 | + + "favoriteDroid: {name: {EQ: \"C-3PO\"}} " |
| 781 | + + "}) {" + |
| 782 | + " select {" + |
| 783 | + " id" + |
| 784 | + " name" + |
| 785 | + " favoriteDroid {" + |
| 786 | + " name" + |
| 787 | + " }" + |
| 788 | + " friends {" + |
| 789 | + " name" + |
| 790 | + " appearsIn" + |
| 791 | + " }" + |
| 792 | + " }" + |
| 793 | + " }" + |
| 794 | + "}"; |
| 795 | + |
| 796 | + String expected = "{Humans={select=[" |
| 797 | + + "{id=1000, name=Luke Skywalker, favoriteDroid={name=C-3PO}, friends=[" |
| 798 | + + "{name=C-3PO, appearsIn=[A_NEW_HOPE]}, " |
| 799 | + + "{name=Han Solo, appearsIn=[A_NEW_HOPE]}, " |
| 800 | + + "{name=Leia Organa, appearsIn=[A_NEW_HOPE]}, " |
| 801 | + + "{name=R2-D2, appearsIn=[A_NEW_HOPE]}" |
| 802 | + + "]}" |
| 803 | + + "]}}"; |
| 804 | + |
| 805 | + //when: |
| 806 | + Object result = executor.execute(query).getData(); |
| 807 | + |
| 808 | + //then: |
| 809 | + assertThat(result.toString()).isEqualTo(expected); |
| 810 | + } |
| 811 | + |
| 812 | + @Test |
| 813 | + public void queryWithOneToManyRelationsShouldUseLeftOuterJoin() { |
| 814 | + //given: |
| 815 | + String query = "query { " + |
| 816 | + " Humans {" + |
| 817 | + " select {" + |
| 818 | + " id" + |
| 819 | + " name" + |
| 820 | + " homePlanet" + |
| 821 | + " favoriteDroid {" + |
| 822 | + " name" + |
| 823 | + " }" + |
| 824 | + " }" + |
| 825 | + " }" + |
| 826 | + "}"; |
| 827 | + |
| 828 | + String expected = "{Humans={select=[" |
| 829 | + + "{id=1000, name=Luke Skywalker, homePlanet=Tatooine, favoriteDroid={name=C-3PO}}, " |
| 830 | + + "{id=1001, name=Darth Vader, homePlanet=Tatooine, favoriteDroid={name=R2-D2}}, " |
| 831 | + + "{id=1002, name=Han Solo, homePlanet=null, favoriteDroid=null}, " |
| 832 | + + "{id=1003, name=Leia Organa, homePlanet=Alderaan, favoriteDroid=null}, " |
| 833 | + + "{id=1004, name=Wilhuff Tarkin, homePlanet=null, favoriteDroid=null}" |
| 834 | + + "]}}"; |
| 835 | + |
| 836 | + //when: |
| 837 | + Object result = executor.execute(query).getData(); |
| 838 | + |
| 839 | + //then: |
| 840 | + assertThat(result.toString()).isEqualTo(expected); |
| 841 | + } |
| 842 | + |
| 843 | + |
| 844 | + @Test |
| 845 | + public void queryWithWhereOneToManyRelationsShouldUseLeftOuterJoinAndApplyCriteria() { |
| 846 | + //given: |
| 847 | + String query = "query { " + |
| 848 | + " Humans(where: {favoriteDroid: {name: {EQ: \"C-3PO\"}}}) {" + |
| 849 | + " select {" + |
| 850 | + " id" + |
| 851 | + " name" + |
| 852 | + " homePlanet" + |
| 853 | + " favoriteDroid {" + |
| 854 | + " name" + |
| 855 | + " }" + |
| 856 | + " }" + |
| 857 | + " }" + |
| 858 | + "}"; |
| 859 | + |
| 860 | + String expected = "{Humans={select=[" |
| 861 | + + "{id=1000, name=Luke Skywalker, homePlanet=Tatooine, favoriteDroid={name=C-3PO}}" |
| 862 | + + "]}}"; |
| 863 | + |
| 864 | + //when: |
| 865 | + Object result = executor.execute(query).getData(); |
| 866 | + |
| 867 | + //then: |
| 868 | + assertThat(result.toString()).isEqualTo(expected); |
| 869 | + } |
| 870 | + |
753 | 871 |
|
754 | 872 | }
|
0 commit comments