Beispiel #1
0
        public async Task EndToEndIntegrationTest()
        {
            var builder = new TestServerBuilder();

            builder.AddScoped <IMusicService, MusicService>();
            builder.AddSingleton <IMusicRepository, MusicRepository>();
            builder.AddGraphType <MusicController>();
            builder.AddGraphQL(o =>
            {
                o.ExecutionOptions.AwaitEachRequestedField = true;
            });

            var server = builder.Build();

            // Test the following areas
            // -----------------------------------
            // queries
            // input values: scalars
            // batch child query ("records" is a batch list extension method)
            // root level controller actions (note no nesting under the declared "music" field of the controller for the "artists" field)
            var expected     = LoadOutputFile("RetrieveArtistsAndRecords.json");
            var queryBuilder = server.CreateQueryContextBuilder();

            queryBuilder.AddQueryText(
                @"query {
                                artists(searchText: ""queen"") {
                                    id
                                    name
                                    records {
                                        id
                                        name
                                        genre {
                                            id
                                            name
                                        }
                                    }
                                }
                            }");

            var result1 = await server.RenderResult(queryBuilder);

            CommonAssertions.AreEqualJsonStrings(expected, result1, "(1): " + result1);

            // Test the following areas
            // -----------------------------------
            // virtual routing (the "music" field is a virtual field declared on the controller)
            // mutations
            // input values: scalars
            // batch sybling query ("company" is a batch sybling extension method)
            expected     = LoadOutputFile("CreateNewArtist.json");
            queryBuilder = server.CreateQueryContextBuilder();
            queryBuilder.AddQueryText(
                @"mutation {
                          music{
                            createArtist(artistName: ""EXO"", recordCompanyId: 4) {
                                id
                                name
                                company {
                                    id
                                    name
                                }
                            }
                        }}");

            var result2 = await server.RenderResult(queryBuilder);

            CommonAssertions.AreEqualJsonStrings(expected, result2, "(2): " + result2);

            // Test the following areas
            // -----------------------------------
            // virtual routing (the "music" field is a virtual field declared on the controller)
            // mutations
            // input values: complex objects
            // unicode characters
            expected     = LoadOutputFile("CreateRecord.json");
            queryBuilder = server.CreateQueryContextBuilder();
            queryBuilder.AddQueryText(
                @"mutation {
                          music{
                            createRecord(artist: {id: 10, name: ""EXO"", recordCompanyId: 4},
                                         genre: {id:2, name: ""pop""},
                                         songName:""다이아몬드"") {
                                id
                                artistId
                                genre { id name }
                                name
                            }
                        }}");

            var result3 = await server.RenderResult(queryBuilder);

            CommonAssertions.AreEqualJsonStrings(expected, result3, "(3): " + result3);
        }