public SchemesQuerySpec() { this.testAccessor = Substitute.For <ISchemesReadModelAccessor>(); this.testServer = new TestServer(new WebHostBuilder() .ConfigureServices(services => services.AddAutofac()) .ConfigureTestServices(services => services .AddSingleton <ISchemesReadModelAccessor>(this.testAccessor)) .UseSetting(nameof(ElasticSearchConfig.ELASTIC_SEARCH_CLIENT_URL), "http://test.com") .UseSetting(nameof(CorsConfig.ALLOWED_ORIGINS), "http://localhost") .UseSetting(nameof(AuthConfig.NoErrors), true.ToString()) .UseSetting(nameof(ScreenshotsConfig.SCREENSHOT_SIZES), "test") .UseSetting(nameof(ScreenshotsConfig.SCREENSHOT_URL_TITLES), "test") .UseSetting(nameof(ScreenshotsConfig.SCREENSHOT_CDN_ID_TEMPLATE), "test") .UseSetting(nameof(ScreenshotsConfig.SCREENSHOT_CDN_URL_TEMPLATE), "test") .UseSetting(nameof(ElasticSearchConfig.ELASTIC_SEARCH_SCHEMES_READ_MODEL_INDEX_NAME), "test") .UseSetting(nameof(ElasticSearchConfig.ELASTIC_SEARCH_SCHEMES_READ_MODEL_TYPE_NAME), "test") .UseStartup <StartupStub>()); this.testClient = this.testServer.CreateClient(); this.testScheme = new PublicScheme { Id = "test-public-scheme-id", Name = "test-color-scheme", PublisherName = "test-publisher", PublisherId = "test-publisher-id", Likes = 1, LikedBy = new[] { this.testUserId }, Favorites = 1, FavoritedBy = new[] { this.testUserId }, ColorScheme = new ColorScheme { colorSchemeId = "-", colorSchemeName = "-", mode = "auto", scrollbarStyle = "true", backgroundLightnessLimit = 42, hideBigBackgroundImages = true, maxBackgroundImageSize = 500 } }; }
public SchemesQuery(ISchemesReadModelAccessor accessor) { this.Name = "Schemes"; this.FieldAsync <PublicSchemeType, PublicScheme>( "details", "Get Midnight Lizard's color scheme details", new QueryArguments(new QueryArgument <IdGraphType> { Name = nameof(PublicScheme.Id) }), resolve: async context => await accessor.ReadModelAsync( context.Arguments[this.ToCamelCase(nameof(PublicScheme.Id))] as string)); this.FieldAsync <SchemesSearchResultsType, SearchResults <PublicScheme> >( "search", "Search Midnight Lizard's color schemes", new QueryArguments( new QueryArgument <SchemeListEnum> { Name = nameof(SearchOptions.List), DefaultValue = SchemeList.full.ToString() }, new QueryArgument <SchemeSideEnum> { Name = nameof(SearchOptions.Side), DefaultValue = SchemeSide.any.ToString() }, new QueryArgument <HueFilterEnum> { Name = nameof(SearchOptions.Bg), DefaultValue = HueFilter.any.ToString() }, new QueryArgument <StringGraphType> { Name = nameof(SearchOptions.Query), DefaultValue = "" }, new QueryArgument <IdGraphType> { Name = nameof(SearchOptions.CurrentUserId), DefaultValue = "" }, new QueryArgument <IntGraphType> { Name = nameof(SearchOptions.PageSize), DefaultValue = 10 }, new QueryArgument <StringGraphType> { Name = nameof(SearchOptions.Cursor), DefaultValue = "" }, new QueryArgument <IdGraphType> { Name = nameof(SearchOptions.PublisherId), Description = $@"This argument is deprecated. Use [{ this.ToCamelCase(nameof(SearchOptions.CurrentUserId))}] instead", DefaultValue = "" } ), resolve: async context => { var currentUserId = context.Arguments[this.ToCamelCase(nameof(SearchOptions.CurrentUserId))] as string; if (string.IsNullOrEmpty(currentUserId)) { currentUserId = context.Arguments[this.ToCamelCase(nameof(SearchOptions.PublisherId))] as string; } return(await accessor.SearchSchemesAsync(new SearchOptions( list: Enum.Parse <SchemeList>(context.Arguments[this.ToCamelCase(nameof(SearchOptions.List))].ToString()), side: Enum.Parse <SchemeSide>(context.Arguments[this.ToCamelCase(nameof(SearchOptions.Side))].ToString()), bg: Enum.Parse <HueFilter>(context.Arguments[this.ToCamelCase(nameof(SearchOptions.Bg))].ToString()), query: context.Arguments[this.ToCamelCase(nameof(SearchOptions.Query))] as string, pageSize: Math.Min((int)context.Arguments[this.ToCamelCase(nameof(SearchOptions.PageSize))], 1000), cursor: context.Arguments[this.ToCamelCase(nameof(SearchOptions.Cursor))] as string, currentUserId: currentUserId ), context.CancellationToken)); }); }