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); }