Browse Source

LanguagesConfig => Languages.

pull/596/head
Sebastian 5 years ago
parent
commit
b7910ccd4a
  1. 6
      backend/src/Squidex.Domain.Apps.Entities/Apps/AppDomainObject.cs
  2. 2
      backend/src/Squidex.Domain.Apps.Entities/Apps/AppEntityExtensions.cs
  3. 2
      backend/src/Squidex.Domain.Apps.Entities/Apps/IAppEntity.cs
  4. 10
      backend/src/Squidex.Domain.Apps.Entities/Apps/State/AppState.cs
  5. 2
      backend/src/Squidex.Domain.Apps.Entities/Contents/ContentsSearchSource.cs
  6. 2
      backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ContentResolvers.cs
  7. 8
      backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ConvertData.cs
  8. 4
      backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ResolveReferences.cs
  9. 3
      backend/src/Squidex.Infrastructure/EventSourcing/EventConsumerInfo.cs
  10. 8
      backend/src/Squidex.Infrastructure/EventSourcing/Grains/BatchSubscriber.cs
  11. 13
      backend/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs
  12. 8
      backend/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs
  13. 9
      backend/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs
  14. 6
      backend/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerManagerGrain.cs
  15. 5
      backend/src/Squidex.Infrastructure/EventSourcing/RetrySubscription.cs
  16. 2
      backend/src/Squidex/Areas/Api/Controllers/Apps/Models/AppLanguageDto.cs
  17. 2
      backend/src/Squidex/Areas/Api/Controllers/Apps/Models/AppLanguagesDto.cs
  18. 6
      backend/src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs
  19. 6
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppDomainObjectTests.cs
  20. 2
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/MongoDb/MongoDbQueryTests.cs
  21. 2
      backend/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/Mocks.cs

6
backend/src/Squidex.Domain.Apps.Entities/Apps/AppDomainObject.cs

@ -192,7 +192,7 @@ namespace Squidex.Domain.Apps.Entities.Apps
case AddLanguage addLanguage: case AddLanguage addLanguage:
return UpdateReturn(addLanguage, c => return UpdateReturn(addLanguage, c =>
{ {
GuardAppLanguages.CanAdd(Snapshot.LanguagesConfig, c); GuardAppLanguages.CanAdd(Snapshot.Languages, c);
AddLanguage(c); AddLanguage(c);
@ -202,7 +202,7 @@ namespace Squidex.Domain.Apps.Entities.Apps
case RemoveLanguage removeLanguage: case RemoveLanguage removeLanguage:
return UpdateReturn(removeLanguage, c => return UpdateReturn(removeLanguage, c =>
{ {
GuardAppLanguages.CanRemove(Snapshot.LanguagesConfig, c); GuardAppLanguages.CanRemove(Snapshot.Languages, c);
RemoveLanguage(c); RemoveLanguage(c);
@ -212,7 +212,7 @@ namespace Squidex.Domain.Apps.Entities.Apps
case UpdateLanguage updateLanguage: case UpdateLanguage updateLanguage:
return UpdateReturn(updateLanguage, c => return UpdateReturn(updateLanguage, c =>
{ {
GuardAppLanguages.CanUpdate(Snapshot.LanguagesConfig, c); GuardAppLanguages.CanUpdate(Snapshot.Languages, c);
UpdateLanguage(c); UpdateLanguage(c);

2
backend/src/Squidex.Domain.Apps.Entities/Apps/AppEntityExtensions.cs

@ -13,7 +13,7 @@ namespace Squidex.Domain.Apps.Entities.Apps
{ {
public static PartitionResolver PartitionResolver(this IAppEntity entity) public static PartitionResolver PartitionResolver(this IAppEntity entity)
{ {
return entity.LanguagesConfig.ToResolver(); return entity.Languages.ToResolver();
} }
} }
} }

2
backend/src/Squidex.Domain.Apps.Entities/Apps/IAppEntity.cs

@ -34,7 +34,7 @@ namespace Squidex.Domain.Apps.Entities.Apps
AppContributors Contributors { get; } AppContributors Contributors { get; }
LanguagesConfig LanguagesConfig { get; } LanguagesConfig Languages { get; }
Workflows Workflows { get; } Workflows Workflows { get; }

10
backend/src/Squidex.Domain.Apps.Entities/Apps/State/AppState.cs

@ -40,7 +40,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.State
public AppContributors Contributors { get; set; } = AppContributors.Empty; public AppContributors Contributors { get; set; } = AppContributors.Empty;
public LanguagesConfig LanguagesConfig { get; set; } = LanguagesConfig.English; public LanguagesConfig Languages { get; set; } = LanguagesConfig.English;
public Workflows Workflows { get; set; } = Workflows.Empty; public Workflows Workflows { get; set; } = Workflows.Empty;
@ -138,7 +138,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.State
if (ev.IsMaster) if (ev.IsMaster)
{ {
l = LanguagesConfig.MakeMaster(ev.Language); l = Languages.MakeMaster(ev.Language);
} }
return l; return l;
@ -177,11 +177,11 @@ namespace Squidex.Domain.Apps.Entities.Apps.State
private bool UpdateLanguages<T>(T @event, Func<T, LanguagesConfig, LanguagesConfig> update) private bool UpdateLanguages<T>(T @event, Func<T, LanguagesConfig, LanguagesConfig> update)
{ {
var previous = LanguagesConfig; var previous = Languages;
LanguagesConfig = update(@event, previous); Languages = update(@event, previous);
return !ReferenceEquals(previous, LanguagesConfig); return !ReferenceEquals(previous, Languages);
} }
private bool UpdatePatterns<T>(T @event, Func<T, AppPatterns, AppPatterns> update) private bool UpdatePatterns<T>(T @event, Func<T, AppPatterns, AppPatterns> update)

2
backend/src/Squidex.Domain.Apps.Entities/Contents/ContentsSearchSource.cs

@ -71,7 +71,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
{ {
var url = urlGenerator.ContentUI(appId, content.SchemaId, content.Id); var url = urlGenerator.ContentUI(appId, content.SchemaId, content.Id);
var name = FormatName(content, context.App.LanguagesConfig.Master); var name = FormatName(content, context.App.Languages.Master);
result.Add(name, SearchResultType.Content, url, content.SchemaDisplayName); result.Add(name, SearchResultType.Content, url, content.SchemaDisplayName);
} }

2
backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ContentResolvers.cs

@ -77,7 +77,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL.Types
public static readonly IFieldResolver FlatData = Resolve((content, c, context) => public static readonly IFieldResolver FlatData = Resolve((content, c, context) =>
{ {
var language = context.Context.App.LanguagesConfig.Master; var language = context.Context.App.Languages.Master;
return content.Data.ToFlatten(language); return content.Data.ToFlatten(language);
}); });

8
backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ConvertData.cs

@ -115,21 +115,21 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries.Steps
yield return FieldConverters.ForValues(ValueConverters.ForNested(cleanReferences)); yield return FieldConverters.ForValues(ValueConverters.ForNested(cleanReferences));
} }
yield return FieldConverters.ResolveInvariant(context.App.LanguagesConfig); yield return FieldConverters.ResolveInvariant(context.App.Languages);
yield return FieldConverters.ResolveLanguages(context.App.LanguagesConfig); yield return FieldConverters.ResolveLanguages(context.App.Languages);
if (!context.IsFrontendClient) if (!context.IsFrontendClient)
{ {
if (context.ShouldResolveLanguages()) if (context.ShouldResolveLanguages())
{ {
yield return FieldConverters.ResolveFallbackLanguages(context.App.LanguagesConfig); yield return FieldConverters.ResolveFallbackLanguages(context.App.Languages);
} }
var languages = context.Languages(); var languages = context.Languages();
if (languages.Any()) if (languages.Any())
{ {
yield return FieldConverters.FilterLanguages(context.App.LanguagesConfig, languages); yield return FieldConverters.FilterLanguages(context.App.Languages, languages);
} }
var assetUrls = context.AssetUrls().ToList(); var assetUrls = context.AssetUrls().ToList();

4
backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ResolveReferences.cs

@ -121,7 +121,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries.Steps
private static JsonObject Format(IContentEntity content, Context context, ISchemaEntity referencedSchema) private static JsonObject Format(IContentEntity content, Context context, ISchemaEntity referencedSchema)
{ {
return content.Data.FormatReferences(referencedSchema.SchemaDef, context.App.LanguagesConfig); return content.Data.FormatReferences(referencedSchema.SchemaDef, context.App.Languages);
} }
private static JsonObject CreateFallback(Context context, List<IEnrichedContentEntity> referencedContents) private static JsonObject CreateFallback(Context context, List<IEnrichedContentEntity> referencedContents)
@ -130,7 +130,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries.Steps
var value = JsonValue.Object(); var value = JsonValue.Object();
foreach (var partitionKey in context.App.LanguagesConfig.AllKeys) foreach (var partitionKey in context.App.Languages.AllKeys)
{ {
value.Add(partitionKey, text); value.Add(partitionKey, text);
} }

3
backend/src/Squidex.Infrastructure/EventSourcing/EventConsumerInfo.cs

@ -5,8 +5,11 @@
// All rights reserved. Licensed under the MIT license. // All rights reserved. Licensed under the MIT license.
// ========================================================================== // ==========================================================================
using Orleans.Concurrency;
namespace Squidex.Infrastructure.EventSourcing namespace Squidex.Infrastructure.EventSourcing
{ {
[Immutable]
public sealed class EventConsumerInfo public sealed class EventConsumerInfo
{ {
public bool IsStopped { get; set; } public bool IsStopped { get; set; }

8
backend/src/Squidex.Infrastructure/EventSourcing/Grains/BatchSubscriber.cs

@ -17,7 +17,6 @@ namespace Squidex.Infrastructure.EventSourcing.Grains
internal sealed class BatchSubscriber : IEventSubscriber internal sealed class BatchSubscriber : IEventSubscriber
{ {
private readonly ITargetBlock<Job> pipelineStart; private readonly ITargetBlock<Job> pipelineStart;
private readonly IEventDataFormatter eventDataFormatter;
private readonly IEventSubscription eventSubscription; private readonly IEventSubscription eventSubscription;
private readonly IDataflowBlock pipelineEnd; private readonly IDataflowBlock pipelineEnd;
@ -46,8 +45,6 @@ namespace Squidex.Infrastructure.EventSourcing.Grains
Func<IEventSubscriber, IEventSubscription> factory, Func<IEventSubscriber, IEventSubscription> factory,
TaskScheduler scheduler) TaskScheduler scheduler)
{ {
this.eventDataFormatter = eventDataFormatter;
var batchSize = Math.Max(1, eventConsumer!.BatchSize); var batchSize = Math.Max(1, eventConsumer!.BatchSize);
var batchDelay = Math.Max(100, eventConsumer.BatchDelay); var batchDelay = Math.Max(100, eventConsumer.BatchDelay);
@ -168,6 +165,11 @@ namespace Squidex.Infrastructure.EventSourcing.Grains
public Task OnErrorAsync(IEventSubscription subscription, Exception exception) public Task OnErrorAsync(IEventSubscription subscription, Exception exception)
{ {
if (exception is OperationCanceledException)
{
return Task.CompletedTask;
}
var job = new Job var job = new Job
{ {
Sender = subscription, Sender = subscription,

13
backend/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs

@ -10,7 +10,6 @@ using System.Collections.Generic;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Orleans.Concurrency;
using Squidex.Infrastructure.Log; using Squidex.Infrastructure.Log;
using Squidex.Infrastructure.Orleans; using Squidex.Infrastructure.Orleans;
@ -71,14 +70,14 @@ namespace Squidex.Infrastructure.EventSourcing.Grains
} }
} }
public Task<Immutable<EventConsumerInfo>> GetStateAsync() public Task<EventConsumerInfo> GetStateAsync()
{ {
return Task.FromResult(CreateInfo()); return Task.FromResult(CreateInfo());
} }
private Immutable<EventConsumerInfo> CreateInfo() private EventConsumerInfo CreateInfo()
{ {
return State.ToInfo(eventConsumer!.Name).AsImmutable(); return State.ToInfo(eventConsumer!.Name);
} }
public Task OnEventsAsync(object sender, IReadOnlyList<Envelope<IEvent>> events, string position) public Task OnEventsAsync(object sender, IReadOnlyList<Envelope<IEvent>> events, string position)
@ -128,7 +127,7 @@ namespace Squidex.Infrastructure.EventSourcing.Grains
} }
} }
public async Task<Immutable<EventConsumerInfo>> StartAsync() public async Task<EventConsumerInfo> StartAsync()
{ {
if (!State.IsStopped) if (!State.IsStopped)
{ {
@ -145,7 +144,7 @@ namespace Squidex.Infrastructure.EventSourcing.Grains
return CreateInfo(); return CreateInfo();
} }
public async Task<Immutable<EventConsumerInfo>> StopAsync() public async Task<EventConsumerInfo> StopAsync()
{ {
if (State.IsStopped) if (State.IsStopped)
{ {
@ -162,7 +161,7 @@ namespace Squidex.Infrastructure.EventSourcing.Grains
return CreateInfo(); return CreateInfo();
} }
public async Task<Immutable<EventConsumerInfo>> ResetAsync() public async Task<EventConsumerInfo> ResetAsync()
{ {
await DoAndUpdateStateAsync(async () => await DoAndUpdateStateAsync(async () =>
{ {

8
backend/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs

@ -67,7 +67,7 @@ namespace Squidex.Infrastructure.EventSourcing.Grains
var consumerInfos = await Task.WhenAll(tasks); var consumerInfos = await Task.WhenAll(tasks);
return new Immutable<List<EventConsumerInfo>>(consumerInfos.Select(r => r.Value).ToList()); return consumerInfos.ToList().AsImmutable();
} }
public Task StartAllAsync() public Task StartAllAsync()
@ -84,21 +84,21 @@ namespace Squidex.Infrastructure.EventSourcing.Grains
.Select(c => StopAsync(c.Name))); .Select(c => StopAsync(c.Name)));
} }
public Task<Immutable<EventConsumerInfo>> ResetAsync(string consumerName) public Task<EventConsumerInfo> ResetAsync(string consumerName)
{ {
var eventConsumer = GrainFactory.GetGrain<IEventConsumerGrain>(consumerName); var eventConsumer = GrainFactory.GetGrain<IEventConsumerGrain>(consumerName);
return eventConsumer.ResetAsync(); return eventConsumer.ResetAsync();
} }
public Task<Immutable<EventConsumerInfo>> StartAsync(string consumerName) public Task<EventConsumerInfo> StartAsync(string consumerName)
{ {
var eventConsumer = GrainFactory.GetGrain<IEventConsumerGrain>(consumerName); var eventConsumer = GrainFactory.GetGrain<IEventConsumerGrain>(consumerName);
return eventConsumer.StartAsync(); return eventConsumer.StartAsync();
} }
public Task<Immutable<EventConsumerInfo>> StopAsync(string consumerName) public Task<EventConsumerInfo> StopAsync(string consumerName)
{ {
var eventConsumer = GrainFactory.GetGrain<IEventConsumerGrain>(consumerName); var eventConsumer = GrainFactory.GetGrain<IEventConsumerGrain>(consumerName);

9
backend/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs

@ -6,19 +6,18 @@
// ========================================================================== // ==========================================================================
using System.Threading.Tasks; using System.Threading.Tasks;
using Orleans.Concurrency;
using Squidex.Infrastructure.Orleans; using Squidex.Infrastructure.Orleans;
namespace Squidex.Infrastructure.EventSourcing.Grains namespace Squidex.Infrastructure.EventSourcing.Grains
{ {
public interface IEventConsumerGrain : IBackgroundGrain public interface IEventConsumerGrain : IBackgroundGrain
{ {
Task<Immutable<EventConsumerInfo>> GetStateAsync(); Task<EventConsumerInfo> GetStateAsync();
Task<Immutable<EventConsumerInfo>> StopAsync(); Task<EventConsumerInfo> StopAsync();
Task<Immutable<EventConsumerInfo>> StartAsync(); Task<EventConsumerInfo> StartAsync();
Task<Immutable<EventConsumerInfo>> ResetAsync(); Task<EventConsumerInfo> ResetAsync();
} }
} }

6
backend/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerManagerGrain.cs

@ -20,11 +20,11 @@ namespace Squidex.Infrastructure.EventSourcing.Grains
Task StopAllAsync(); Task StopAllAsync();
Task<Immutable<EventConsumerInfo>> StopAsync(string consumerName); Task<EventConsumerInfo> StopAsync(string consumerName);
Task<Immutable<EventConsumerInfo>> StartAsync(string consumerName); Task<EventConsumerInfo> StartAsync(string consumerName);
Task<Immutable<EventConsumerInfo>> ResetAsync(string consumerName); Task<EventConsumerInfo> ResetAsync(string consumerName);
Task<Immutable<List<EventConsumerInfo>>> GetConsumersAsync(); Task<Immutable<List<EventConsumerInfo>>> GetConsumersAsync();
} }

5
backend/src/Squidex.Infrastructure/EventSourcing/RetrySubscription.cs

@ -76,6 +76,11 @@ namespace Squidex.Infrastructure.EventSourcing
public async Task OnErrorAsync(IEventSubscription subscription, Exception exception) public async Task OnErrorAsync(IEventSubscription subscription, Exception exception)
{ {
if (exception is OperationCanceledException)
{
return;
}
Unsubscribe(); Unsubscribe();
if (retryWindow.CanRetryAfterFailure()) if (retryWindow.CanRetryAfterFailure())

2
backend/src/Squidex/Areas/Api/Controllers/Apps/Models/AppLanguageDto.cs

@ -69,7 +69,7 @@ namespace Squidex.Areas.Api.Controllers.Apps.Models
AddPutLink("update", resources.Url<AppLanguagesController>(x => nameof(x.PutLanguage), values)); AddPutLink("update", resources.Url<AppLanguagesController>(x => nameof(x.PutLanguage), values));
} }
if (resources.CanDeleteLanguage && app.LanguagesConfig.Languages.Count > 1) if (resources.CanDeleteLanguage && app.Languages.Languages.Count > 1)
{ {
AddDeleteLink("delete", resources.Url<AppLanguagesController>(x => nameof(x.DeleteLanguage), values)); AddDeleteLink("delete", resources.Url<AppLanguagesController>(x => nameof(x.DeleteLanguage), values));
} }

2
backend/src/Squidex/Areas/Api/Controllers/Apps/Models/AppLanguagesDto.cs

@ -22,7 +22,7 @@ namespace Squidex.Areas.Api.Controllers.Apps.Models
public static AppLanguagesDto FromApp(IAppEntity app, Resources resources) public static AppLanguagesDto FromApp(IAppEntity app, Resources resources)
{ {
var config = app.LanguagesConfig; var config = app.Languages;
var result = new AppLanguagesDto var result = new AppLanguagesDto
{ {

6
backend/src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs

@ -48,7 +48,7 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers
{ {
var eventConsumer = await GetGrain().StartAsync(consumerName); var eventConsumer = await GetGrain().StartAsync(consumerName);
var response = EventConsumerDto.FromEventConsumerInfo(eventConsumer.Value, Resources); var response = EventConsumerDto.FromEventConsumerInfo(eventConsumer, Resources);
return Ok(response); return Ok(response);
} }
@ -61,7 +61,7 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers
{ {
var eventConsumer = await GetGrain().StopAsync(consumerName); var eventConsumer = await GetGrain().StopAsync(consumerName);
var response = EventConsumerDto.FromEventConsumerInfo(eventConsumer.Value, Resources); var response = EventConsumerDto.FromEventConsumerInfo(eventConsumer, Resources);
return Ok(response); return Ok(response);
} }
@ -74,7 +74,7 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers
{ {
var eventConsumer = await GetGrain().ResetAsync(consumerName); var eventConsumer = await GetGrain().ResetAsync(consumerName);
var response = EventConsumerDto.FromEventConsumerInfo(eventConsumer.Value, Resources); var response = EventConsumerDto.FromEventConsumerInfo(eventConsumer, Resources);
return Ok(response); return Ok(response);
} }

6
backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppDomainObjectTests.cs

@ -498,7 +498,7 @@ namespace Squidex.Domain.Apps.Entities.Apps
result.ShouldBeEquivalent(sut.Snapshot); result.ShouldBeEquivalent(sut.Snapshot);
Assert.True(sut.Snapshot.LanguagesConfig.Contains(Language.DE)); Assert.True(sut.Snapshot.Languages.Contains(Language.DE));
LastEvents LastEvents
.ShouldHaveSameEvents( .ShouldHaveSameEvents(
@ -518,7 +518,7 @@ namespace Squidex.Domain.Apps.Entities.Apps
result.ShouldBeEquivalent(sut.Snapshot); result.ShouldBeEquivalent(sut.Snapshot);
Assert.False(sut.Snapshot.LanguagesConfig.Contains(Language.DE)); Assert.False(sut.Snapshot.Languages.Contains(Language.DE));
LastEvents LastEvents
.ShouldHaveSameEvents( .ShouldHaveSameEvents(
@ -538,7 +538,7 @@ namespace Squidex.Domain.Apps.Entities.Apps
result.ShouldBeEquivalent(sut.Snapshot); result.ShouldBeEquivalent(sut.Snapshot);
Assert.True(sut.Snapshot.LanguagesConfig.Contains(Language.DE)); Assert.True(sut.Snapshot.Languages.Contains(Language.DE));
LastEvents LastEvents
.ShouldHaveSameEvents( .ShouldHaveSameEvents(

2
backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/MongoDb/MongoDbQueryTests.cs

@ -76,7 +76,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.MongoDb
var app = A.Dummy<IAppEntity>(); var app = A.Dummy<IAppEntity>();
A.CallTo(() => app.Id).Returns(DomainId.NewGuid()); A.CallTo(() => app.Id).Returns(DomainId.NewGuid());
A.CallTo(() => app.Version).Returns(3); A.CallTo(() => app.Version).Returns(3);
A.CallTo(() => app.LanguagesConfig).Returns(languagesConfig); A.CallTo(() => app.Languages).Returns(languagesConfig);
} }
[Fact] [Fact]

2
backend/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/Mocks.cs

@ -32,7 +32,7 @@ namespace Squidex.Domain.Apps.Entities.TestHelpers
A.CallTo(() => app.Id).Returns(appId.Id); A.CallTo(() => app.Id).Returns(appId.Id);
A.CallTo(() => app.Name).Returns(appId.Name); A.CallTo(() => app.Name).Returns(appId.Name);
A.CallTo(() => app.LanguagesConfig).Returns(config); A.CallTo(() => app.Languages).Returns(config);
A.CallTo(() => app.UniqueId).Returns(appId.Id); A.CallTo(() => app.UniqueId).Returns(appId.Id);
return app; return app;

Loading…
Cancel
Save