Browse Source

Merge branch 'master' into hateaos

pull/364/head
Sebastian 7 years ago
parent
commit
e042955b7d
  1. 6
      .testrunsettings
  2. 12
      Dockerfile
  3. 12
      Dockerfile.build
  4. 11
      src/Squidex.Domain.Apps.Entities/Contents/GraphQL/CachingGraphQLService.cs
  5. 8
      src/Squidex.Domain.Apps.Entities/Contents/GraphQL/GraphQLModel.cs
  6. 2
      src/Squidex.Domain.Apps.Entities/Contents/GraphQL/IGraphModel.cs
  7. 42
      src/Squidex.Domain.Apps.Entities/Contents/GraphQL/LoggingMiddleware.cs
  8. 2
      src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ContentDataGraphType.cs
  9. 10
      src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/NestedGraphType.cs
  10. 6
      src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/QueryGraphTypeVisitor.cs
  11. 11
      src/Squidex.Domain.Apps.Entities/Contents/ScheduleJob.cs
  12. 10
      src/Squidex/Areas/Api/Controllers/Contents/Models/ScheduleJobDto.cs
  13. 27
      src/Squidex/Areas/IdentityServer/Views/Account/Login.cshtml
  14. 38
      src/Squidex/package-lock.json
  15. 16
      src/Squidex/package.json
  16. 3
      tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs

6
.testrunsettings

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<RunConfiguration>
<MaxCpuCount>4</MaxCpuCount>
</RunConfiguration>
</RunSettings>

12
Dockerfile

@ -5,11 +5,20 @@ FROM squidex/dotnet:2.2-sdk-chromium-phantomjs-node as builder
WORKDIR /src WORKDIR /src
# Copy Node project files.
COPY src/Squidex/package*.json /tmp/ COPY src/Squidex/package*.json /tmp/
# Install Node packages # Install Node packages
RUN cd /tmp && npm install --loglevel=error RUN cd /tmp && npm install --loglevel=error
# Copy nuget project files.
COPY /**/**/*.csproj /tmp/
# Copy nuget.config for package sources.
COPY NuGet.Config /tmp/
# Install nuget packages
RUN bash -c 'pushd /tmp; for p in *.csproj; do dotnet restore $p --verbosity quiet; true; done; popd'
COPY . . COPY . .
# Build Frontend # Build Frontend
@ -19,8 +28,7 @@ RUN cp -a /tmp/node_modules src/Squidex/ \
&& npm run build && npm run build
# Test Backend # Test Backend
RUN dotnet restore \ RUN dotnet test tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj --filter Category!=Dependencies \
&& dotnet test --filter Category!=Dependencies tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj \
&& dotnet test tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj \ && dotnet test tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj \
&& dotnet test tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj \ && dotnet test tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj \
&& dotnet test tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj \ && dotnet test tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj \

12
Dockerfile.build

@ -2,11 +2,20 @@ FROM squidex/dotnet:2.2-sdk-chromium-phantomjs-node as builder
WORKDIR /src WORKDIR /src
# Copy Node project files.
COPY src/Squidex/package*.json /tmp/ COPY src/Squidex/package*.json /tmp/
# Install Node packages # Install Node packages
RUN cd /tmp && npm install --loglevel=error RUN cd /tmp && npm install --loglevel=error
# Copy Dotnet project files.
COPY /**/**/*.csproj /tmp/
# Copy nuget.config for package sources.
COPY NuGet.Config /tmp/
# Install Dotnet packages
RUN bash -c 'pushd /tmp; for p in *.csproj; do dotnet restore $p --verbosity quiet; true; done; popd'
COPY . . COPY . .
# Build Frontend # Build Frontend
@ -16,8 +25,7 @@ RUN cp -a /tmp/node_modules src/Squidex/ \
&& npm run build && npm run build
# Test Backend # Test Backend
RUN dotnet restore \ RUN dotnet test tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj --filter Category!=Dependencies \
&& dotnet test --filter Category!=Dependencies tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj \
&& dotnet test tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj \ && dotnet test tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj \
&& dotnet test tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj \ && dotnet test tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj \
&& dotnet test tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj \ && dotnet test tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj \

11
src/Squidex.Domain.Apps.Entities/Contents/GraphQL/CachingGraphQLService.cs

@ -12,6 +12,7 @@ using Microsoft.Extensions.Caching.Memory;
using Squidex.Domain.Apps.Entities.Apps; using Squidex.Domain.Apps.Entities.Apps;
using Squidex.Domain.Apps.Entities.Assets; using Squidex.Domain.Apps.Entities.Assets;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Log;
namespace Squidex.Domain.Apps.Entities.Contents.GraphQL namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
{ {
@ -20,6 +21,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
private static readonly TimeSpan CacheDuration = TimeSpan.FromMinutes(10); private static readonly TimeSpan CacheDuration = TimeSpan.FromMinutes(10);
private readonly IContentQueryService contentQuery; private readonly IContentQueryService contentQuery;
private readonly IGraphQLUrlGenerator urlGenerator; private readonly IGraphQLUrlGenerator urlGenerator;
private readonly ISemanticLog log;
private readonly IAssetQueryService assetQuery; private readonly IAssetQueryService assetQuery;
private readonly IAppProvider appProvider; private readonly IAppProvider appProvider;
@ -28,18 +30,21 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
IAppProvider appProvider, IAppProvider appProvider,
IAssetQueryService assetQuery, IAssetQueryService assetQuery,
IContentQueryService contentQuery, IContentQueryService contentQuery,
IGraphQLUrlGenerator urlGenerator) IGraphQLUrlGenerator urlGenerator,
ISemanticLog log)
: base(cache) : base(cache)
{ {
Guard.NotNull(appProvider, nameof(appProvider)); Guard.NotNull(appProvider, nameof(appProvider));
Guard.NotNull(assetQuery, nameof(assetQuery)); Guard.NotNull(assetQuery, nameof(assetQuery));
Guard.NotNull(contentQuery, nameof(contentQuery)); Guard.NotNull(contentQuery, nameof(contentQuery));
Guard.NotNull(urlGenerator, nameof(urlGenerator)); Guard.NotNull(urlGenerator, nameof(urlGenerator));
Guard.NotNull(log, nameof(log));
this.appProvider = appProvider; this.appProvider = appProvider;
this.assetQuery = assetQuery; this.assetQuery = assetQuery;
this.contentQuery = contentQuery; this.contentQuery = contentQuery;
this.urlGenerator = urlGenerator; this.urlGenerator = urlGenerator;
this.log = log;
} }
public async Task<(bool HasError, object Response)> QueryAsync(QueryContext context, params GraphQLQuery[] queries) public async Task<(bool HasError, object Response)> QueryAsync(QueryContext context, params GraphQLQuery[] queries)
@ -70,14 +75,14 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
return result; return result;
} }
private static async Task<(bool HasError, object Response)> QueryInternalAsync(GraphQLModel model, GraphQLExecutionContext ctx, GraphQLQuery query) private async Task<(bool HasError, object Response)> QueryInternalAsync(GraphQLModel model, GraphQLExecutionContext ctx, GraphQLQuery query)
{ {
if (string.IsNullOrWhiteSpace(query.Query)) if (string.IsNullOrWhiteSpace(query.Query))
{ {
return (false, new { data = new object() }); return (false, new { data = new object() });
} }
var result = await model.ExecuteAsync(ctx, query); var result = await model.ExecuteAsync(ctx, query, log);
if (result.Errors?.Any() == true) if (result.Errors?.Any() == true)
{ {

8
src/Squidex.Domain.Apps.Entities/Contents/GraphQL/GraphQLModel.cs

@ -20,6 +20,7 @@ using Squidex.Domain.Apps.Entities.Contents.GraphQL.Types;
using Squidex.Domain.Apps.Entities.Contents.GraphQL.Types.Utils; using Squidex.Domain.Apps.Entities.Contents.GraphQL.Types.Utils;
using Squidex.Domain.Apps.Entities.Schemas; using Squidex.Domain.Apps.Entities.Schemas;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Log;
using GraphQLSchema = GraphQL.Types.Schema; using GraphQLSchema = GraphQL.Types.Schema;
#pragma warning disable IDE0003 #pragma warning disable IDE0003
@ -135,9 +136,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
return partitionResolver(key); return partitionResolver(key);
} }
public (IGraphType ResolveType, ValueResolver Resolver) GetGraphType(ISchemaEntity schema, IField field) public (IGraphType ResolveType, ValueResolver Resolver) GetGraphType(ISchemaEntity schema, IField field, string fieldName)
{ {
return field.Accept(new QueryGraphTypeVisitor(schema, GetContentType, this, assetListType)); return field.Accept(new QueryGraphTypeVisitor(schema, GetContentType, this, assetListType, fieldName));
} }
public IGraphType GetAssetType() public IGraphType GetAssetType()
@ -171,7 +172,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
return contentTypes.GetOrAdd(schema, s => new ContentGraphType()); return contentTypes.GetOrAdd(schema, s => new ContentGraphType());
} }
public async Task<(object Data, object[] Errors)> ExecuteAsync(GraphQLExecutionContext context, GraphQLQuery query) public async Task<(object Data, object[] Errors)> ExecuteAsync(GraphQLExecutionContext context, GraphQLQuery query, ISemanticLog log)
{ {
Guard.NotNull(context, nameof(context)); Guard.NotNull(context, nameof(context));
@ -179,6 +180,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
var result = await new DocumentExecuter().ExecuteAsync(options => var result = await new DocumentExecuter().ExecuteAsync(options =>
{ {
options.FieldMiddleware.Use(LoggingMiddleware.Create(log));
options.OperationName = query.OperationName; options.OperationName = query.OperationName;
options.UserContext = context; options.UserContext = context;
options.Schema = graphQLSchema; options.Schema = graphQLSchema;

2
src/Squidex.Domain.Apps.Entities/Contents/GraphQL/IGraphModel.cs

@ -35,6 +35,6 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
IGraphType GetContentDataType(Guid schemaId); IGraphType GetContentDataType(Guid schemaId);
(IGraphType ResolveType, ValueResolver Resolver) GetGraphType(ISchemaEntity schema, IField field); (IGraphType ResolveType, ValueResolver Resolver) GetGraphType(ISchemaEntity schema, IField field, string fieldName);
} }
} }

42
src/Squidex.Domain.Apps.Entities/Contents/GraphQL/LoggingMiddleware.cs

@ -0,0 +1,42 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System;
using GraphQL.Instrumentation;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Log;
namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
{
public static class LoggingMiddleware
{
public static Func<FieldMiddlewareDelegate, FieldMiddlewareDelegate> Create(ISemanticLog log)
{
Guard.NotNull(log, nameof(log));
return new Func<FieldMiddlewareDelegate, FieldMiddlewareDelegate>(next =>
{
return async context =>
{
try
{
return await next(context);
}
catch (Exception ex)
{
log.LogWarning(ex, w => w
.WriteProperty("action", "reolveField")
.WriteProperty("status", "failed")
.WriteProperty("field", context.FieldName));
throw ex;
}
};
});
}
}
}

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

@ -27,7 +27,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL.Types
foreach (var (field, fieldName, typeName) in schema.SchemaDef.Fields.SafeFields()) foreach (var (field, fieldName, typeName) in schema.SchemaDef.Fields.SafeFields())
{ {
var (resolvedType, valueResolver) = model.GetGraphType(schema, field); var (resolvedType, valueResolver) = model.GetGraphType(schema, field, fieldName);
if (valueResolver != null) if (valueResolver != null)
{ {

10
src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/NestedGraphType.cs

@ -16,18 +16,18 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL.Types
{ {
public sealed class NestedGraphType : ObjectGraphType<JsonObject> public sealed class NestedGraphType : ObjectGraphType<JsonObject>
{ {
public NestedGraphType(IGraphModel model, ISchemaEntity schema, IArrayField field) public NestedGraphType(IGraphModel model, ISchemaEntity schema, IArrayField field, string fieldName)
{ {
var schemaType = schema.TypeName(); var schemaType = schema.TypeName();
var schemaName = schema.DisplayName(); var schemaName = schema.DisplayName();
var fieldName = field.DisplayName(); var fieldDisplayName = field.DisplayName();
Name = $"{schemaType}{fieldName}ChildDto"; Name = $"{schemaType}{fieldName}ChildDto";
foreach (var (nestedField, nestedName, _) in field.Fields.SafeFields()) foreach (var (nestedField, nestedName, _) in field.Fields.SafeFields())
{ {
var fieldInfo = model.GetGraphType(schema, nestedField); var fieldInfo = model.GetGraphType(schema, nestedField, nestedName);
if (fieldInfo.ResolveType != null) if (fieldInfo.ResolveType != null)
{ {
@ -38,12 +38,12 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL.Types
Name = nestedName, Name = nestedName,
Resolver = resolver, Resolver = resolver,
ResolvedType = fieldInfo.ResolveType, ResolvedType = fieldInfo.ResolveType,
Description = $"The {fieldName}/{nestedField.DisplayName()} nested field." Description = $"The {fieldDisplayName}/{nestedField.DisplayName()} nested field."
}); });
} }
} }
Description = $"The structure of the {schemaName}.{fieldName} nested schema."; Description = $"The structure of the {schemaName}.{fieldDisplayName} nested schema.";
} }
private static FuncFieldResolver<object> ValueResolver(NestedField nestedField, (IGraphType ResolveType, ValueResolver Resolver) fieldInfo) private static FuncFieldResolver<object> ValueResolver(NestedField nestedField, (IGraphType ResolveType, ValueResolver Resolver) fieldInfo)

6
src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/QueryGraphTypeVisitor.cs

@ -22,13 +22,15 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL.Types
private readonly Func<Guid, IGraphType> schemaResolver; private readonly Func<Guid, IGraphType> schemaResolver;
private readonly IGraphModel model; private readonly IGraphModel model;
private readonly IGraphType assetListType; private readonly IGraphType assetListType;
private readonly string fieldName;
public QueryGraphTypeVisitor(ISchemaEntity schema, Func<Guid, IGraphType> schemaResolver, IGraphModel model, IGraphType assetListType) public QueryGraphTypeVisitor(ISchemaEntity schema, Func<Guid, IGraphType> schemaResolver, IGraphModel model, IGraphType assetListType, string fieldName)
{ {
this.model = model; this.model = model;
this.assetListType = assetListType; this.assetListType = assetListType;
this.schema = schema; this.schema = schema;
this.schemaResolver = schemaResolver; this.schemaResolver = schemaResolver;
this.fieldName = fieldName;
} }
public (IGraphType ResolveType, ValueResolver Resolver) Visit(IArrayField field) public (IGraphType ResolveType, ValueResolver Resolver) Visit(IArrayField field)
@ -93,7 +95,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL.Types
private (IGraphType ResolveType, ValueResolver Resolver) ResolveNested(IArrayField field) private (IGraphType ResolveType, ValueResolver Resolver) ResolveNested(IArrayField field)
{ {
var schemaFieldType = new ListGraphType(new NonNullGraphType(new NestedGraphType(model, schema, field))); var schemaFieldType = new ListGraphType(new NonNullGraphType(new NestedGraphType(model, schema, field, this.fieldName)));
return (schemaFieldType, NoopResolver); return (schemaFieldType, NoopResolver);
} }

11
src/Squidex.Domain.Apps.Entities/Contents/ScheduleJob.cs

@ -1,4 +1,5 @@
// ========================================================================== 
// ==========================================================================
// Squidex Headless CMS // Squidex Headless CMS
// ========================================================================== // ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt) // Copyright (c) Squidex UG (haftungsbeschraenkt)
@ -22,17 +23,17 @@ namespace Squidex.Domain.Apps.Entities.Contents
public Instant DueTime { get; } public Instant DueTime { get; }
public ScheduleJob(Guid id, Status status, RefToken scheduledBy, Instant due) public ScheduleJob(Guid id, Status status, RefToken scheduledBy, Instant dueTime)
{ {
Id = id; Id = id;
ScheduledBy = scheduledBy; ScheduledBy = scheduledBy;
Status = status; Status = status;
DueTime = due; DueTime = dueTime;
} }
public static ScheduleJob Build(Status status, RefToken by, Instant due) public static ScheduleJob Build(Status status, RefToken scheduledBy, Instant dueTime)
{ {
return new ScheduleJob(Guid.NewGuid(), status, by, due); return new ScheduleJob(Guid.NewGuid(), status, scheduledBy, dueTime);
} }
} }
} }

10
src/Squidex/Areas/Api/Controllers/Contents/Models/ScheduleJobDto.cs

@ -6,6 +6,7 @@
// ========================================================================== // ==========================================================================
using System; using System;
using System.ComponentModel.DataAnnotations;
using NodaTime; using NodaTime;
using Squidex.Domain.Apps.Core.Contents; using Squidex.Domain.Apps.Core.Contents;
using Squidex.Infrastructure; using Squidex.Infrastructure;
@ -25,13 +26,14 @@ namespace Squidex.Areas.Api.Controllers.Contents.Models
public Status Status { get; set; } public Status Status { get; set; }
/// <summary> /// <summary>
/// The user who schedule the content. /// The target date and time when the content should be scheduled.
/// </summary> /// </summary>
public RefToken ScheduledBy { get; set; } public Instant DueTime { get; set; }
/// <summary> /// <summary>
/// The target date and time when the content should be scheduled. /// The user who schedule the content.
/// </summary> /// </summary>
public Instant DueTime { get; set; } [Required]
public RefToken ScheduledBy { get; set; }
} }
} }

27
src/Squidex/Areas/IdentityServer/Views/Account/Login.cshtml

@ -53,22 +53,22 @@
{ {
if (Model.IsLogin) if (Model.IsLogin)
{ {
if (Model.IsFailed) if (Model.IsFailed)
{ {
<div class="form-alert form-alert-error">Email or password not correct.</div> <div class="form-alert form-alert-error">Email or password not correct.</div>
} }
<form asp-controller="Account" asp-action="Login" asp-route-returnurl="@Model.ReturnUrl" method="post"> <form asp-controller="Account" asp-action="Login" asp-route-returnurl="@Model.ReturnUrl" method="post">
<div class="form-group"> <div class="form-group">
<input type="email" class="form-control" name="email" id="email" placeholder="Enter Email" /> <input type="email" class="form-control" name="email" id="email" placeholder="Enter Email" />
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="password" class="form-control" name="password" id="password" placeholder="Enter Password" /> <input type="password" class="form-control" name="password" id="password" placeholder="Enter Password" />
</div> </div>
<button type="submit" class="btn btn-block btn-primary">@type</button> <button type="submit" class="btn btn-block btn-primary">@type</button>
</form> </form>
} }
else else
{ {
@ -95,7 +95,6 @@ else
var redirectButtons = document.getElementsByClassName("redirect-button"); var redirectButtons = document.getElementsByClassName("redirect-button");
if (redirectButtons.length === 1) { if (redirectButtons.length === 1) {
debugger;
redirectButtons[0].click(); redirectButtons[0].click();
} }
</script> </script>

38
src/Squidex/package-lock.json

@ -3196,14 +3196,22 @@
} }
}, },
"browserslist": { "browserslist": {
"version": "4.3.5", "version": "4.6.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.5.tgz", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.3.tgz",
"integrity": "sha512-z9ZhGc3d9e/sJ9dIx5NFXkKoaiQTnrvrMsN3R1fGb1tkWWNSz12UewJn9TNxGo1l7J23h0MRaPmk7jfeTZYs1w==", "integrity": "sha512-CNBqTCq22RKM8wKJNowcqihHJ4SkI8CGeK7KOR9tPboXUuS5Zk5lQgzzTbs4oxD8x+6HUshZUa2OyNI9lR93bQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"caniuse-lite": "^1.0.30000912", "caniuse-lite": "^1.0.30000975",
"electron-to-chromium": "^1.3.86", "electron-to-chromium": "^1.3.164",
"node-releases": "^1.0.5" "node-releases": "^1.1.23"
},
"dependencies": {
"caniuse-lite": {
"version": "1.0.30000975",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000975.tgz",
"integrity": "sha512-ZsXA9YWQX6ATu5MNg+Vx/cMQ+hM6vBBSqDeJs8ruk9z0ky4yIHML15MoxcFt088ST2uyjgqyUGRJButkptWf0w==",
"dev": true
}
} }
}, },
"buffer": { "buffer": {
@ -3450,9 +3458,9 @@
} }
}, },
"caniuse-lite": { "caniuse-lite": {
"version": "1.0.30000918", "version": "1.0.30000975",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000918.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000975.tgz",
"integrity": "sha512-CAZ9QXGViBvhHnmIHhsTPSWFBujDaelKnUj7wwImbyQRxmXynYqKGi3UaZTSz9MoVh+1EVxOS/DFIkrJYgR3aw==", "integrity": "sha512-ZsXA9YWQX6ATu5MNg+Vx/cMQ+hM6vBBSqDeJs8ruk9z0ky4yIHML15MoxcFt088ST2uyjgqyUGRJButkptWf0w==",
"dev": true "dev": true
}, },
"canonical-path": { "canonical-path": {
@ -4950,9 +4958,9 @@
"dev": true "dev": true
}, },
"electron-to-chromium": { "electron-to-chromium": {
"version": "1.3.90", "version": "1.3.164",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.90.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.164.tgz",
"integrity": "sha512-IjJZKRhFbWSOX1w0sdIXgp4CMRguu6UYcTckyFF/Gjtemsu/25eZ+RXwFlV+UWcIueHyQA1UnRJxocTpH5NdGA==", "integrity": "sha512-VLlalqUeduN4+fayVtRZvGP2Hl1WrRxlwzh2XVVMJym3IFrQUS29BFQ1GP/BxOJXJI1OFCrJ5BnFEsAe8NHtOg==",
"dev": true "dev": true
}, },
"elliptic": { "elliptic": {
@ -10755,9 +10763,9 @@
} }
}, },
"node-releases": { "node-releases": {
"version": "1.1.1", "version": "1.1.23",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.1.tgz", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.23.tgz",
"integrity": "sha512-2UXrBr6gvaebo5TNF84C66qyJJ6r0kxBObgZIDX3D3/mt1ADKiHux3NJPWisq0wxvJJdkjECH+9IIKYViKj71Q==", "integrity": "sha512-uq1iL79YjfYC0WXoHbC/z28q/9pOl8kSHaXdWmAAc8No+bDwqkZbzIJz55g/MUsPgSGm9LZ7QSUbzTcH5tz47w==",
"dev": true, "dev": true,
"requires": { "requires": {
"semver": "^5.3.0" "semver": "^5.3.0"

16
src/Squidex/package.json

@ -47,21 +47,23 @@
"zone.js": "0.9.1" "zone.js": "0.9.1"
}, },
"devDependencies": { "devDependencies": {
"@angular/compiler-cli": "7.2.14",
"@angular/compiler": "7.2.14", "@angular/compiler": "7.2.14",
"@angular/compiler-cli": "7.2.14",
"@ngtools/webpack": "7.3.8", "@ngtools/webpack": "7.3.8",
"@types/core-js": "2.5.0", "@types/core-js": "2.5.0",
"@types/jasmine": "3.3.12", "@types/jasmine": "3.3.12",
"@types/marked": "0.6.5", "@types/marked": "0.6.5",
"@types/mousetrap": "1.6", "@types/mousetrap": "1.6",
"@types/node": "12.0.0", "@types/node": "12.0.0",
"@types/react-dom": "16.8.4",
"@types/react": "16.8.16", "@types/react": "16.8.16",
"@types/react-dom": "16.8.4",
"@types/sortablejs": "1.7.2", "@types/sortablejs": "1.7.2",
"angular-router-loader": "0.8.5", "angular-router-loader": "0.8.5",
"angular2-template-loader": "0.6.2", "angular2-template-loader": "0.6.2",
"awesome-typescript-loader": "5.2.1", "awesome-typescript-loader": "5.2.1",
"babel-core": "6.26.3", "babel-core": "6.26.3",
"browserslist": "^4.6.3",
"caniuse-lite": "^1.0.30000975",
"circular-dependency-plugin": "5.0.2", "circular-dependency-plugin": "5.0.2",
"codelyzer": "5.0.1", "codelyzer": "5.0.1",
"cpx": "1.5.0", "cpx": "1.5.0",
@ -72,16 +74,16 @@
"ignore-loader": "0.1.2", "ignore-loader": "0.1.2",
"istanbul-instrumenter-loader": "3.0.1", "istanbul-instrumenter-loader": "3.0.1",
"jasmine-core": "3.4.0", "jasmine-core": "3.4.0",
"karma": "4.1.0",
"karma-chrome-launcher": "2.2.0", "karma-chrome-launcher": "2.2.0",
"karma-cli": "2.0.0", "karma-cli": "2.0.0",
"karma-coverage-istanbul-reporter": "2.0.5", "karma-coverage-istanbul-reporter": "2.0.5",
"karma-htmlfile-reporter": "0.3.8", "karma-htmlfile-reporter": "0.3.8",
"karma-jasmine-html-reporter": "1.4.2",
"karma-jasmine": "2.0.1", "karma-jasmine": "2.0.1",
"karma-jasmine-html-reporter": "1.4.2",
"karma-mocha-reporter": "2.2.5", "karma-mocha-reporter": "2.2.5",
"karma-sourcemap-loader": "0.3.7", "karma-sourcemap-loader": "0.3.7",
"karma-webpack": "3.0.5", "karma-webpack": "3.0.5",
"karma": "4.1.0",
"mini-css-extract-plugin": "0.6.0", "mini-css-extract-plugin": "0.6.0",
"node-sass": "4.12.0", "node-sass": "4.12.0",
"optimize-css-assets-webpack-plugin": "5.0.1", "optimize-css-assets-webpack-plugin": "5.0.1",
@ -93,15 +95,15 @@
"style-loader": "0.23.1", "style-loader": "0.23.1",
"ts-loader": "5.4.5", "ts-loader": "5.4.5",
"tsconfig-paths-webpack-plugin": "3.2.0", "tsconfig-paths-webpack-plugin": "3.2.0",
"tslint-webpack-plugin": "2.0.4",
"tslint": "5.16.0", "tslint": "5.16.0",
"tslint-webpack-plugin": "2.0.4",
"typemoq": "2.1.0", "typemoq": "2.1.0",
"typescript": "3.2.4", "typescript": "3.2.4",
"uglifyjs-webpack-plugin": "2.1.2", "uglifyjs-webpack-plugin": "2.1.2",
"underscore": "1.9.1", "underscore": "1.9.1",
"webpack": "4.30.0",
"webpack-cli": "3.3.1", "webpack-cli": "3.3.1",
"webpack-dev-server": "3.3.1", "webpack-dev-server": "3.3.1",
"webpack-merge": "4.2.1", "webpack-merge": "4.2.1"
"webpack": "4.30.0"
} }
} }

3
tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs

@ -24,6 +24,7 @@ using Squidex.Domain.Apps.Entities.Schemas;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Json; using Squidex.Infrastructure.Json;
using Squidex.Infrastructure.Json.Objects; using Squidex.Infrastructure.Json.Objects;
using Squidex.Infrastructure.Log;
using Xunit; using Xunit;
#pragma warning disable SA1311 // Static readonly fields must begin with upper-case letter #pragma warning disable SA1311 // Static readonly fields must begin with upper-case letter
@ -96,7 +97,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
A.CallTo(() => appProvider.GetSchemasAsync(appId)).Returns(allSchemas); A.CallTo(() => appProvider.GetSchemasAsync(appId)).Returns(allSchemas);
sut = new CachingGraphQLService(cache, appProvider, assetQuery, contentQuery, new FakeUrlGenerator()); sut = new CachingGraphQLService(cache, appProvider, assetQuery, contentQuery, new FakeUrlGenerator(), A.Fake<ISemanticLog>());
} }
protected static IContentEntity CreateContent(Guid id, Guid refId, Guid assetId, NamedContentData data = null, NamedContentData dataDraft = null) protected static IContentEntity CreateContent(Guid id, Guid refId, Guid assetId, NamedContentData data = null, NamedContentData dataDraft = null)

Loading…
Cancel
Save