Merge pull request #51 from dotnet-architecture/dev
eShopOnContainers fork
This commit is contained in:
		
						commit
						3f0c46741a
					
				| @ -7,7 +7,6 @@ | |||||||
| docker-compose*.yml | docker-compose*.yml | ||||||
| docker-compose.dcproj | docker-compose.dcproj | ||||||
| *.sln | *.sln | ||||||
| !eShopOnContainers-ServicesAndWebApps.sln |  | ||||||
| *.md | *.md | ||||||
| hosts | hosts | ||||||
| LICENSE | LICENSE | ||||||
| @ -31,4 +30,13 @@ cli-linux | |||||||
| **/wwwroot/lib/* | **/wwwroot/lib/* | ||||||
| global.json | global.json | ||||||
| **/appsettings.localhost.json | **/appsettings.localhost.json | ||||||
| src/Web/WebSPA/wwwroot/ | src/Web/WebSPA/wwwroot/ | ||||||
|  | packages/ | ||||||
|  | csproj-files/ | ||||||
|  | test-results/ | ||||||
|  | TestResults/ | ||||||
|  | src/Mobile/ | ||||||
|  | src/Web/Catalog.WebForms/ | ||||||
|  | src/Web/WebMonolithic/ | ||||||
|  | src/BuildingBlocks/CommandBus/ | ||||||
|  | src/Services/Marketing/Infrastructure/ | ||||||
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -26,6 +26,9 @@ bld/ | |||||||
| # Visual Studio 2015 cache/options directory | # Visual Studio 2015 cache/options directory | ||||||
| .vs/ | .vs/ | ||||||
| 
 | 
 | ||||||
|  | # Dockerfile projects folder for restore-packages script | ||||||
|  | csproj-files/ | ||||||
|  | 
 | ||||||
| # .js files created on build: | # .js files created on build: | ||||||
| src/Web/WebMVC/wwwroot/js/site* | src/Web/WebMVC/wwwroot/js/site* | ||||||
| 
 | 
 | ||||||
| @ -42,6 +45,8 @@ src/Web/WebMVC/wwwroot/js/site* | |||||||
| *.VisualState.xml | *.VisualState.xml | ||||||
| TestResult.xml | TestResult.xml | ||||||
| 
 | 
 | ||||||
|  | tests-results/ | ||||||
|  | 
 | ||||||
| # Build Results of an ATL Project | # Build Results of an ATL Project | ||||||
| [Dd]ebugPS/ | [Dd]ebugPS/ | ||||||
| [Rr]eleasePS/ | [Rr]eleasePS/ | ||||||
|  | |||||||
| @ -50,31 +50,3 @@ jobs: | |||||||
|     inputs: |     inputs: | ||||||
|       pathtoPublish: $(Build.ArtifactStagingDirectory)/k8s/helm |       pathtoPublish: $(Build.ArtifactStagingDirectory)/k8s/helm | ||||||
|       artifactName: helm |       artifactName: helm | ||||||
| - job: BuildWindows |  | ||||||
|   pool: |  | ||||||
|     vmImage: 'vs2017-win2016' |  | ||||||
|   steps: |  | ||||||
|   - task: DockerCompose@0 |  | ||||||
|     displayName: Compose build apigws |  | ||||||
|     inputs: |  | ||||||
|       dockerComposeCommand: 'build mobileshoppingapigw mobilemarketingapigw webshoppingapigw webmarketingapigw' |  | ||||||
|       containerregistrytype: Container Registry |  | ||||||
|       dockerRegistryEndpoint: $(registryEndpoint) |  | ||||||
|       dockerComposeFile: docker-compose.yml |  | ||||||
|       qualifyImageNames: true |  | ||||||
|       projectName: "" |  | ||||||
|       dockerComposeFileArgs: | |  | ||||||
|         TAG=$(Build.SourceBranchName) |  | ||||||
|         PLATFORM=win |  | ||||||
|   - task: DockerCompose@0 |  | ||||||
|     displayName: Compose push apigws |  | ||||||
|     inputs: |  | ||||||
|       dockerComposeCommand: 'push mobileshoppingapigw mobilemarketingapigw webshoppingapigw webmarketingapigw' |  | ||||||
|       containerregistrytype: Container Registry |  | ||||||
|       dockerRegistryEndpoint: $(registryEndpoint) |  | ||||||
|       dockerComposeFile: docker-compose.yml |  | ||||||
|       qualifyImageNames: true |  | ||||||
|       projectName: "" |  | ||||||
|       dockerComposeFileArgs: | |  | ||||||
|         TAG=$(Build.SourceBranchName) |  | ||||||
|         PLATFORM=win |  | ||||||
							
								
								
									
										2
									
								
								cli-windows/set-dockernat-networkategory-to-private.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								cli-windows/set-dockernat-networkategory-to-private.ps1
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  |  #Requires -RunAsAdministrator | ||||||
|  |  Get-NetConnectionProfile | Where-Object { $_.InterfaceAlias -match "(DockerNAT)" } | ForEach-Object { Set-NetConnectionProfile -InterfaceIndex $_.InterfaceIndex -NetworkCategory Private } | ||||||
| @ -110,6 +110,7 @@ services: | |||||||
|       - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} |       - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} | ||||||
|       - OrchestratorType=${ORCHESTRATOR_TYPE} |       - OrchestratorType=${ORCHESTRATOR_TYPE} | ||||||
|       - UseLoadTest=${USE_LOADTEST:-False} |       - UseLoadTest=${USE_LOADTEST:-False} | ||||||
|  |       - Serilog__MinimumLevel__Override__Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ=Verbose | ||||||
|     ports: |     ports: | ||||||
|       - "5102:80"   # Important: In a production environment your should remove the external port (5102) kept here for microservice debugging purposes.  |       - "5102:80"   # Important: In a production environment your should remove the external port (5102) kept here for microservice debugging purposes.  | ||||||
|                     # The API Gateway redirects and access through the internal port (80). |                     # The API Gateway redirects and access through the internal port (80). | ||||||
| @ -130,6 +131,7 @@ services: | |||||||
|       - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} |       - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} | ||||||
|       - OrchestratorType=${ORCHESTRATOR_TYPE} |       - OrchestratorType=${ORCHESTRATOR_TYPE} | ||||||
|       - UseLoadTest=${USE_LOADTEST:-False} |       - UseLoadTest=${USE_LOADTEST:-False} | ||||||
|  |       - Serilog__MinimumLevel__Override__Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ=Verbose | ||||||
|     ports: |     ports: | ||||||
|       - "5111:80" |       - "5111:80" | ||||||
| 
 | 
 | ||||||
| @ -168,6 +170,8 @@ services: | |||||||
|       - AzureServiceBusEnabled=False |       - AzureServiceBusEnabled=False | ||||||
|       - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} |       - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} | ||||||
|       - OrchestratorType=${ORCHESTRATOR_TYPE} |       - OrchestratorType=${ORCHESTRATOR_TYPE} | ||||||
|  |       - Serilog__MinimumLevel__Override__Payment.API.IntegrationEvents.EventHandling=Verbose | ||||||
|  |       - Serilog__MinimumLevel__Override__Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ=Verbose | ||||||
|     ports: |     ports: | ||||||
|       - "5108:80"   # Important: In a production environment your should remove the external port (5108) kept here for microservice debugging purposes.  |       - "5108:80"   # Important: In a production environment your should remove the external port (5108) kept here for microservice debugging purposes.  | ||||||
|                     # The API Gateway redirects and access through the internal port (80). |                     # The API Gateway redirects and access through the internal port (80). | ||||||
| @ -326,40 +330,40 @@ services: | |||||||
|     environment: |     environment: | ||||||
|       - ASPNETCORE_ENVIRONMENT=Production |       - ASPNETCORE_ENVIRONMENT=Production | ||||||
|       - ASPNETCORE_URLS=http://0.0.0.0:80 |       - ASPNETCORE_URLS=http://0.0.0.0:80 | ||||||
|       - HealthChecks-UI__HealthChecks__1__Name=WebMVC HTTP Check |       - HealthChecks-UI__HealthChecks__0__Name=WebMVC HTTP Check | ||||||
|       - HealthChecks-UI__HealthChecks__1__Uri=http://webmvc/hc |       - HealthChecks-UI__HealthChecks__0__Uri=http://webmvc/hc | ||||||
|       - HealthChecks-UI__HealthChecks__2__Name=WebSPA HTTP Check |       - HealthChecks-UI__HealthChecks__1__Name=WebSPA HTTP Check | ||||||
|       - HealthChecks-UI__HealthChecks__2__Uri=http://webspa/hc |       - HealthChecks-UI__HealthChecks__1__Uri=http://webspa/hc | ||||||
|       - HealthChecks-UI__HealthChecks__3__Name=Web Shopping Aggregator GW HTTP Check |       - HealthChecks-UI__HealthChecks__2__Name=Web Shopping Aggregator GW HTTP Check | ||||||
|       - HealthChecks-UI__HealthChecks__3__Uri=http://webshoppingagg/hc |       - HealthChecks-UI__HealthChecks__2__Uri=http://webshoppingagg/hc | ||||||
|       - HealthChecks-UI__HealthChecks__4__Name=Mobile Shopping Aggregator HTTP Check |       - HealthChecks-UI__HealthChecks__3__Name=Mobile Shopping Aggregator HTTP Check | ||||||
|       - HealthChecks-UI__HealthChecks__4__Uri=http://mobileshoppingagg/hc |       - HealthChecks-UI__HealthChecks__3__Uri=http://mobileshoppingagg/hc | ||||||
|       - HealthChecks-UI__HealthChecks__5__Name=Mobile Shopping API GW HTTP Check |       - HealthChecks-UI__HealthChecks__4__Name=Mobile Shopping API GW HTTP Check | ||||||
|       - HealthChecks-UI__HealthChecks__5__Uri=http://mobileshoppingapigw/hc |       - HealthChecks-UI__HealthChecks__4__Uri=http://mobileshoppingapigw/hc | ||||||
|       - HealthChecks-UI__HealthChecks__6__Name=Mobile Marketing API GW HTTP Check |       - HealthChecks-UI__HealthChecks__5__Name=Mobile Marketing API GW HTTP Check | ||||||
|       - HealthChecks-UI__HealthChecks__6__Uri=http://mobilemarketingapigw/hc |       - HealthChecks-UI__HealthChecks__5__Uri=http://mobilemarketingapigw/hc | ||||||
|       - HealthChecks-UI__HealthChecks__7__Name=Web Shopping API GW HTTP Check |       - HealthChecks-UI__HealthChecks__6__Name=Web Shopping API GW HTTP Check | ||||||
|       - HealthChecks-UI__HealthChecks__7__Uri=http://webshoppingapigw/hc |       - HealthChecks-UI__HealthChecks__6__Uri=http://webshoppingapigw/hc | ||||||
|       - HealthChecks-UI__HealthChecks__8__Name=Web Marketing API GW HTTP Check |       - HealthChecks-UI__HealthChecks__7__Name=Web Marketing API GW HTTP Check | ||||||
|       - HealthChecks-UI__HealthChecks__8__Uri=http://webmarketingapigw/hc |       - HealthChecks-UI__HealthChecks__7__Uri=http://webmarketingapigw/hc | ||||||
|       - HealthChecks-UI__HealthChecks__9__Name=Ordering HTTP Check |       - HealthChecks-UI__HealthChecks__8__Name=Ordering HTTP Check | ||||||
|       - HealthChecks-UI__HealthChecks__9__Uri=http://ordering.api/hc |       - HealthChecks-UI__HealthChecks__8__Uri=http://ordering.api/hc | ||||||
|       - HealthChecks-UI__HealthChecks__10__Name=Ordering HTTP Background Check |       - HealthChecks-UI__HealthChecks__9__Name=Ordering HTTP Background Check | ||||||
|       - HealthChecks-UI__HealthChecks__10__Uri=http://ordering.backgroundtasks/hc |       - HealthChecks-UI__HealthChecks__9__Uri=http://ordering.backgroundtasks/hc | ||||||
|       - HealthChecks-UI__HealthChecks__11__Name=Basket HTTP Check |       - HealthChecks-UI__HealthChecks__10__Name=Basket HTTP Check | ||||||
|       - HealthChecks-UI__HealthChecks__11__Uri=http://basket.api/hc |       - HealthChecks-UI__HealthChecks__10__Uri=http://basket.api/hc | ||||||
|       - HealthChecks-UI__HealthChecks__12__Name=Catalog HTTP Check |       - HealthChecks-UI__HealthChecks__11__Name=Catalog HTTP Check | ||||||
|       - HealthChecks-UI__HealthChecks__12__Uri=http://catalog.api/hc |       - HealthChecks-UI__HealthChecks__11__Uri=http://catalog.api/hc | ||||||
|       - HealthChecks-UI__HealthChecks__13__Name=Identity HTTP Check |       - HealthChecks-UI__HealthChecks__12__Name=Identity HTTP Check | ||||||
|       - HealthChecks-UI__HealthChecks__13__Uri=http://identity.api/hc |       - HealthChecks-UI__HealthChecks__12__Uri=http://identity.api/hc | ||||||
|       - HealthChecks-UI__HealthChecks__14__Name=Marketing HTTP Check |       - HealthChecks-UI__HealthChecks__13__Name=Marketing HTTP Check | ||||||
|       - HealthChecks-UI__HealthChecks__14__Uri=http://marketing.api/hc |       - HealthChecks-UI__HealthChecks__13__Uri=http://marketing.api/hc | ||||||
|       - HealthChecks-UI__HealthChecks__15__Name=Locations HTTP Check |       - HealthChecks-UI__HealthChecks__14__Name=Locations HTTP Check | ||||||
|       - HealthChecks-UI__HealthChecks__15__Uri=http://locations.api/hc |       - HealthChecks-UI__HealthChecks__14__Uri=http://locations.api/hc | ||||||
|       - HealthChecks-UI__HealthChecks__16__Name=Payments HTTP Check |       - HealthChecks-UI__HealthChecks__15__Name=Payments HTTP Check | ||||||
|       - HealthChecks-UI__HealthChecks__16__Uri=http://payment.api/hc |       - HealthChecks-UI__HealthChecks__15__Uri=http://payment.api/hc | ||||||
|       - HealthChecks-UI__HealthChecks__17__Name=Ordering SignalRHub HTTP Check |       - HealthChecks-UI__HealthChecks__16__Name=Ordering SignalRHub HTTP Check | ||||||
|       - HealthChecks-UI__HealthChecks__17__Uri=http://ordering.signalrhub/hc       |       - HealthChecks-UI__HealthChecks__16__Uri=http://ordering.signalrhub/hc       | ||||||
|       - OrderingBackgroundTasksUrl=http://ordering.backgroundtasks/hc |       - OrderingBackgroundTasksUrl=http://ordering.backgroundtasks/hc | ||||||
|       - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} |       - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} | ||||||
|       - OrchestratorType=${ORCHESTRATOR_TYPE} |       - OrchestratorType=${ORCHESTRATOR_TYPE} | ||||||
|  | |||||||
| @ -45,7 +45,7 @@ if ([string]::IsNullOrEmpty($dns)) { | |||||||
| 
 | 
 | ||||||
| if ($clean) { | if ($clean) { | ||||||
|     Write-Host "Cleaning previous helm releases..." -ForegroundColor Green |     Write-Host "Cleaning previous helm releases..." -ForegroundColor Green | ||||||
|     helm delete --purge $(helm ls -q)  |     helm delete --purge $(helm ls -q eshop)  | ||||||
|     Write-Host "Previous releases deleted" -ForegroundColor Green |     Write-Host "Previous releases deleted" -ForegroundColor Green | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -91,4 +91,4 @@ else { | |||||||
|     Write-Host "eShopOnContainers non-infrastructure charts aren't installed (-deployCharts is false)" -ForegroundColor Yellow |     Write-Host "eShopOnContainers non-infrastructure charts aren't installed (-deployCharts is false)" -ForegroundColor Yellow | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Write-Host "helm charts installed." -ForegroundColor Green | Write-Host "helm charts installed." -ForegroundColor Green | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								restore-packages.cmd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								restore-packages.cmd
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | for /R %%f in (*.csproj) do dotnet restore --no-dependencies %%f | ||||||
| @ -1,6 +1,6 @@ | |||||||
| $startTime = $(Get-Date) | $startTime = $(Get-Date) | ||||||
| 
 | 
 | ||||||
| docker-compose build | docker-compose build --build-arg RUN=scripts/restore-packages | ||||||
| 
 | 
 | ||||||
| $elapsedTime = $(Get-Date) - $startTime | $elapsedTime = $(Get-Date) - $startTime | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								scripts/restore-packages
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								scripts/restore-packages
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | echo RESTORING ALL PACKAGES...; for f in /src/csproj-files/*.csproj; do dotnet restore $f; done | ||||||
							
								
								
									
										1
									
								
								scripts/restore-packages.cmd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								scripts/restore-packages.cmd
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | for %%p in (csproj-files\*.csproj) do dotnet restore %%p | ||||||
| @ -4,13 +4,23 @@ EXPOSE 80 | |||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
| WORKDIR /src/src/ApiGateways/ApiGw-Base/ | WORKDIR /src/src/ApiGateways/ApiGw-Base/ | ||||||
| RUN dotnet restore -nowarn:msb3202,nu1503 | RUN dotnet publish -c Release -o /app | ||||||
| RUN dotnet build -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM build AS publish | FROM build AS publish | ||||||
| RUN dotnet publish -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  | |||||||
| @ -4,13 +4,23 @@ EXPOSE 80 | |||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
| WORKDIR /src/src/ApiGateways/Mobile.Bff.Shopping/aggregator | WORKDIR /src/src/ApiGateways/Mobile.Bff.Shopping/aggregator | ||||||
| RUN dotnet restore -nowarn:msb3202,nu1503 | RUN dotnet publish -c Release -o /app | ||||||
| RUN dotnet build --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM build AS publish | FROM build AS publish | ||||||
| RUN dotnet publish --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  | |||||||
| @ -4,13 +4,23 @@ EXPOSE 80 | |||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
| WORKDIR /src/src/ApiGateways/Web.Bff.Shopping/aggregator | WORKDIR /src/src/ApiGateways/Web.Bff.Shopping/aggregator | ||||||
| RUN dotnet restore -nowarn:msb3202,nu1503 | RUN dotnet publish -c Release -o /app | ||||||
| RUN dotnet build --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM build AS publish | FROM build AS publish | ||||||
| RUN dotnet publish --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  | |||||||
| @ -80,13 +80,16 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ | |||||||
|                     _logger.LogWarning(ex, "Could not publish event: {EventId} after {Timeout}s ({ExceptionMessage})", @event.Id, $"{time.TotalSeconds:n1}", ex.Message); |                     _logger.LogWarning(ex, "Could not publish event: {EventId} after {Timeout}s ({ExceptionMessage})", @event.Id, $"{time.TotalSeconds:n1}", ex.Message); | ||||||
|                 }); |                 }); | ||||||
| 
 | 
 | ||||||
|  |             var eventName = @event.GetType().Name; | ||||||
|  | 
 | ||||||
|  |             _logger.LogTrace("Creating RabbitMQ channel to publish event: {EventId} ({EventName})", @event.Id, eventName); | ||||||
|  | 
 | ||||||
|             using (var channel = _persistentConnection.CreateModel()) |             using (var channel = _persistentConnection.CreateModel()) | ||||||
|             { |             { | ||||||
|                 var eventName = @event.GetType() |  | ||||||
|                     .Name; |  | ||||||
| 
 | 
 | ||||||
|                 channel.ExchangeDeclare(exchange: BROKER_NAME, |                 _logger.LogTrace("Declaring RabbitMQ exchange to publish event: {EventId}", @event.Id); | ||||||
|                                     type: "direct"); | 
 | ||||||
|  |                 channel.ExchangeDeclare(exchange: BROKER_NAME, type: "direct"); | ||||||
| 
 | 
 | ||||||
|                 var message = JsonConvert.SerializeObject(@event); |                 var message = JsonConvert.SerializeObject(@event); | ||||||
|                 var body = Encoding.UTF8.GetBytes(message); |                 var body = Encoding.UTF8.GetBytes(message); | ||||||
| @ -96,11 +99,14 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ | |||||||
|                     var properties = channel.CreateBasicProperties(); |                     var properties = channel.CreateBasicProperties(); | ||||||
|                     properties.DeliveryMode = 2; // persistent |                     properties.DeliveryMode = 2; // persistent | ||||||
| 
 | 
 | ||||||
|                     channel.BasicPublish(exchange: BROKER_NAME, |                     _logger.LogTrace("Publishing event to RabbitMQ: {EventId}", @event.Id); | ||||||
|                                      routingKey: eventName, | 
 | ||||||
|                                      mandatory: true, |                     channel.BasicPublish( | ||||||
|                                      basicProperties: properties, |                         exchange: BROKER_NAME, | ||||||
|                                      body: body); |                         routingKey: eventName, | ||||||
|  |                         mandatory: true, | ||||||
|  |                         basicProperties: properties, | ||||||
|  |                         body: body); | ||||||
|                 }); |                 }); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @ -176,6 +182,8 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ | |||||||
| 
 | 
 | ||||||
|         private void StartBasicConsume() |         private void StartBasicConsume() | ||||||
|         { |         { | ||||||
|  |             _logger.LogTrace("Starting RabbitMQ basic consume"); | ||||||
|  | 
 | ||||||
|             if (_consumerChannel != null) |             if (_consumerChannel != null) | ||||||
|             { |             { | ||||||
|                 var consumer = new AsyncEventingBasicConsumer(_consumerChannel); |                 var consumer = new AsyncEventingBasicConsumer(_consumerChannel); | ||||||
| @ -225,6 +233,8 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ | |||||||
|                 _persistentConnection.TryConnect(); |                 _persistentConnection.TryConnect(); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             _logger.LogTrace("Creating RabbitMQ consumer channel"); | ||||||
|  | 
 | ||||||
|             var channel = _persistentConnection.CreateModel(); |             var channel = _persistentConnection.CreateModel(); | ||||||
| 
 | 
 | ||||||
|             channel.ExchangeDeclare(exchange: BROKER_NAME, |             channel.ExchangeDeclare(exchange: BROKER_NAME, | ||||||
| @ -238,6 +248,8 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ | |||||||
| 
 | 
 | ||||||
|             channel.CallbackException += (sender, ea) => |             channel.CallbackException += (sender, ea) => | ||||||
|             { |             { | ||||||
|  |                 _logger.LogWarning(ea.Exception, "Recreating RabbitMQ consumer channel"); | ||||||
|  | 
 | ||||||
|                 _consumerChannel.Dispose(); |                 _consumerChannel.Dispose(); | ||||||
|                 _consumerChannel = CreateConsumerChannel(); |                 _consumerChannel = CreateConsumerChannel(); | ||||||
|                 StartBasicConsume(); |                 StartBasicConsume(); | ||||||
| @ -248,6 +260,8 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ | |||||||
| 
 | 
 | ||||||
|         private async Task ProcessEvent(string eventName, string message) |         private async Task ProcessEvent(string eventName, string message) | ||||||
|         { |         { | ||||||
|  |             _logger.LogTrace("Processing RabbitMQ event: {EventName}", eventName); | ||||||
|  | 
 | ||||||
|             if (_subsManager.HasSubscriptionsForEvent(eventName)) |             if (_subsManager.HasSubscriptionsForEvent(eventName)) | ||||||
|             { |             { | ||||||
|                 using (var scope = _autofac.BeginLifetimeScope(AUTOFAC_SCOPE_NAME)) |                 using (var scope = _autofac.BeginLifetimeScope(AUTOFAC_SCOPE_NAME)) | ||||||
| @ -274,6 +288,10 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ | |||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 _logger.LogWarning("No subscription for RabbitMQ event: {EventName}", eventName); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF | |||||||
|     public class IntegrationEventLogEntry |     public class IntegrationEventLogEntry | ||||||
|     { |     { | ||||||
|         private IntegrationEventLogEntry() { } |         private IntegrationEventLogEntry() { } | ||||||
|         public IntegrationEventLogEntry(IntegrationEvent @event) |         public IntegrationEventLogEntry(IntegrationEvent @event, Guid transactionId) | ||||||
|         { |         { | ||||||
|             EventId = @event.Id;             |             EventId = @event.Id;             | ||||||
|             CreationTime = @event.CreationDate; |             CreationTime = @event.CreationDate; | ||||||
| @ -20,7 +20,9 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF | |||||||
|             Content = JsonConvert.SerializeObject(@event); |             Content = JsonConvert.SerializeObject(@event); | ||||||
|             State = EventStateEnum.NotPublished; |             State = EventStateEnum.NotPublished; | ||||||
|             TimesSent = 0; |             TimesSent = 0; | ||||||
|  |             TransactionId = transactionId.ToString(); | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|         public Guid EventId { get; private set; } |         public Guid EventId { get; private set; } | ||||||
|         public string EventTypeName { get; private set; } |         public string EventTypeName { get; private set; } | ||||||
|         [NotMapped] |         [NotMapped] | ||||||
| @ -31,6 +33,7 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF | |||||||
|         public int TimesSent { get; set; } |         public int TimesSent { get; set; } | ||||||
|         public DateTime CreationTime { get; private set; } |         public DateTime CreationTime { get; private set; } | ||||||
|         public string Content { get; private set; } |         public string Content { get; private set; } | ||||||
|  |         public string TransactionId { get; private set; } | ||||||
| 
 | 
 | ||||||
|         public IntegrationEventLogEntry DeserializeJsonContent(Type type) |         public IntegrationEventLogEntry DeserializeJsonContent(Type type) | ||||||
|         { |         { | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events; | using Microsoft.EntityFrameworkCore.Storage; | ||||||
|  | using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events; | ||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Data.Common; | using System.Data.Common; | ||||||
| @ -9,8 +10,8 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF.Servi | |||||||
| { | { | ||||||
|     public interface IIntegrationEventLogService |     public interface IIntegrationEventLogService | ||||||
|     { |     { | ||||||
|         Task<IEnumerable<IntegrationEventLogEntry>> RetrieveEventLogsPendingToPublishAsync(); |         Task<IEnumerable<IntegrationEventLogEntry>> RetrieveEventLogsPendingToPublishAsync(Guid transactionId); | ||||||
|         Task SaveEventAsync(IntegrationEvent @event, DbTransaction transaction); |         Task SaveEventAsync(IntegrationEvent @event, IDbContextTransaction transaction); | ||||||
|         Task MarkEventAsPublishedAsync(Guid eventId); |         Task MarkEventAsPublishedAsync(Guid eventId); | ||||||
|         Task MarkEventAsInProgressAsync(Guid eventId); |         Task MarkEventAsInProgressAsync(Guid eventId); | ||||||
|         Task MarkEventAsFailedAsync(Guid eventId); |         Task MarkEventAsFailedAsync(Guid eventId); | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| using Microsoft.EntityFrameworkCore; | using Microsoft.EntityFrameworkCore; | ||||||
| using Microsoft.EntityFrameworkCore.Diagnostics; | using Microsoft.EntityFrameworkCore.Diagnostics; | ||||||
|  | using Microsoft.EntityFrameworkCore.Storage; | ||||||
| using Microsoft.eShopOnContainers.BuildingBlocks.EventBus; | using Microsoft.eShopOnContainers.BuildingBlocks.EventBus; | ||||||
| using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events; | using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events; | ||||||
| using Newtonsoft.Json; | using Newtonsoft.Json; | ||||||
| @ -34,25 +35,24 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF.Servi | |||||||
|                 .ToList(); |                 .ToList(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public async Task<IEnumerable<IntegrationEventLogEntry>> RetrieveEventLogsPendingToPublishAsync() |         public async Task<IEnumerable<IntegrationEventLogEntry>> RetrieveEventLogsPendingToPublishAsync(Guid transactionId) | ||||||
|         { |         { | ||||||
|  |             var tid = transactionId.ToString(); | ||||||
|  | 
 | ||||||
|             return await _integrationEventLogContext.IntegrationEventLogs |             return await _integrationEventLogContext.IntegrationEventLogs | ||||||
|                 .Where(e => e.State == EventStateEnum.NotPublished) |                 .Where(e => e.TransactionId == tid && e.State == EventStateEnum.NotPublished) | ||||||
|                 .OrderBy(o => o.CreationTime) |                 .OrderBy(o => o.CreationTime) | ||||||
|                 .Select(e => e.DeserializeJsonContent(_eventTypes.Find(t=> t.Name == e.EventTypeShortName))) |                 .Select(e => e.DeserializeJsonContent(_eventTypes.Find(t=> t.Name == e.EventTypeShortName))) | ||||||
|                 .ToListAsync();               |                 .ToListAsync();               | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public Task SaveEventAsync(IntegrationEvent @event, DbTransaction transaction) |         public Task SaveEventAsync(IntegrationEvent @event, IDbContextTransaction transaction) | ||||||
|         { |         { | ||||||
|             if (transaction == null) |             if (transaction == null) throw new ArgumentNullException(nameof(transaction)); | ||||||
|             { |  | ||||||
|                 throw new ArgumentNullException(nameof(transaction), $"A {typeof(DbTransaction).FullName} is required as a pre-requisite to save the event."); |  | ||||||
|             } |  | ||||||
| 
 | 
 | ||||||
|             var eventLogEntry = new IntegrationEventLogEntry(@event); |             var eventLogEntry = new IntegrationEventLogEntry(@event, transaction.TransactionId); | ||||||
| 
 | 
 | ||||||
|             _integrationEventLogContext.Database.UseTransaction(transaction); |             _integrationEventLogContext.Database.UseTransaction(transaction.GetDbTransaction()); | ||||||
|             _integrationEventLogContext.IntegrationEventLogs.Add(eventLogEntry); |             _integrationEventLogContext.IntegrationEventLogs.Add(eventLogEntry); | ||||||
| 
 | 
 | ||||||
|             return _integrationEventLogContext.SaveChangesAsync(); |             return _integrationEventLogContext.SaveChangesAsync(); | ||||||
|  | |||||||
| @ -4,19 +4,29 @@ EXPOSE 80 | |||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
| WORKDIR /src/src/Services/Basket/Basket.API | WORKDIR /src/src/Services/Basket/Basket.API | ||||||
| RUN dotnet restore -nowarn:msb3202,nu1503 | RUN dotnet publish -c Release -o /app | ||||||
| RUN dotnet build --no-restore -c Release -o /app |  | ||||||
| 
 |  | ||||||
| FROM build as functionaltest |  | ||||||
| WORKDIR /src/src/Services/Basket/Basket.FunctionalTests |  | ||||||
| 
 | 
 | ||||||
| FROM build as unittest | FROM build as unittest | ||||||
| WORKDIR /src/src/Services/Basket/Basket.UnitTests | WORKDIR /src/src/Services/Basket/Basket.UnitTests | ||||||
| 
 | 
 | ||||||
|  | FROM build as functionaltest | ||||||
|  | WORKDIR /src/src/Services/Basket/Basket.FunctionalTests | ||||||
|  | 
 | ||||||
| FROM build AS publish | FROM build AS publish | ||||||
| RUN dotnet publish --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  | |||||||
| @ -4,10 +4,21 @@ EXPOSE 80 | |||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
| WORKDIR /src/src/Services/Catalog/Catalog.API | WORKDIR /src/src/Services/Catalog/Catalog.API | ||||||
| RUN dotnet restore -nowarn:msb3202,nu1503 | RUN dotnet publish -c Release -o /app | ||||||
| RUN dotnet build --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM build as unittest | FROM build as unittest | ||||||
| WORKDIR /src/src/Services/Catalog/Catalog.UnitTests | WORKDIR /src/src/Services/Catalog/Catalog.UnitTests | ||||||
| @ -16,7 +27,6 @@ FROM build as functionaltest | |||||||
| WORKDIR /src/src/Services/Catalog/Catalog.FunctionalTests | WORKDIR /src/src/Services/Catalog/Catalog.FunctionalTests | ||||||
| 
 | 
 | ||||||
| FROM build AS publish | FROM build AS publish | ||||||
| RUN dotnet publish --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  | |||||||
| @ -0,0 +1,50 @@ | |||||||
|  | // <auto-generated /> | ||||||
|  | using System; | ||||||
|  | using Microsoft.EntityFrameworkCore; | ||||||
|  | using Microsoft.EntityFrameworkCore.Infrastructure; | ||||||
|  | using Microsoft.EntityFrameworkCore.Metadata; | ||||||
|  | using Microsoft.EntityFrameworkCore.Migrations; | ||||||
|  | using Microsoft.EntityFrameworkCore.Storage.ValueConversion; | ||||||
|  | using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF; | ||||||
|  | 
 | ||||||
|  | namespace Catalog.API.Infrastructure.IntegrationEventMigrations | ||||||
|  | { | ||||||
|  |     [DbContext(typeof(IntegrationEventLogContext))] | ||||||
|  |     [Migration("20190507184807_AddTransactionId")] | ||||||
|  |     partial class AddTransactionId | ||||||
|  |     { | ||||||
|  |         protected override void BuildTargetModel(ModelBuilder modelBuilder) | ||||||
|  |         { | ||||||
|  | #pragma warning disable 612, 618 | ||||||
|  |             modelBuilder | ||||||
|  |                 .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") | ||||||
|  |                 .HasAnnotation("Relational:MaxIdentifierLength", 128) | ||||||
|  |                 .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); | ||||||
|  | 
 | ||||||
|  |             modelBuilder.Entity("Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF.IntegrationEventLogEntry", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<Guid>("EventId") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  | 
 | ||||||
|  |                     b.Property<string>("Content") | ||||||
|  |                         .IsRequired(); | ||||||
|  | 
 | ||||||
|  |                     b.Property<DateTime>("CreationTime"); | ||||||
|  | 
 | ||||||
|  |                     b.Property<string>("EventTypeName") | ||||||
|  |                         .IsRequired(); | ||||||
|  | 
 | ||||||
|  |                     b.Property<int>("State"); | ||||||
|  | 
 | ||||||
|  |                     b.Property<int>("TimesSent"); | ||||||
|  | 
 | ||||||
|  |                     b.Property<string>("TransactionId"); | ||||||
|  | 
 | ||||||
|  |                     b.HasKey("EventId"); | ||||||
|  | 
 | ||||||
|  |                     b.ToTable("IntegrationEventLog"); | ||||||
|  |                 }); | ||||||
|  | #pragma warning restore 612, 618 | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,22 @@ | |||||||
|  | using Microsoft.EntityFrameworkCore.Migrations; | ||||||
|  | 
 | ||||||
|  | namespace Catalog.API.Infrastructure.IntegrationEventMigrations | ||||||
|  | { | ||||||
|  |     public partial class AddTransactionId : Migration | ||||||
|  |     { | ||||||
|  |         protected override void Up(MigrationBuilder migrationBuilder) | ||||||
|  |         { | ||||||
|  |             migrationBuilder.AddColumn<string>( | ||||||
|  |                 name: "TransactionId", | ||||||
|  |                 table: "IntegrationEventLog", | ||||||
|  |                 nullable: true); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected override void Down(MigrationBuilder migrationBuilder) | ||||||
|  |         { | ||||||
|  |             migrationBuilder.DropColumn( | ||||||
|  |                 name: "TransactionId", | ||||||
|  |                 table: "IntegrationEventLog"); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,18 @@ | |||||||
|  | using Microsoft.EntityFrameworkCore; | ||||||
|  | using Microsoft.EntityFrameworkCore.Design; | ||||||
|  | using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF; | ||||||
|  | 
 | ||||||
|  | namespace Catalog.API.Infrastructure.IntegrationEventMigrations | ||||||
|  | { | ||||||
|  |     public class IntegrationEventLogContextDesignTimeFactory : IDesignTimeDbContextFactory<IntegrationEventLogContext> | ||||||
|  |     { | ||||||
|  |         public IntegrationEventLogContext CreateDbContext(string[] args) | ||||||
|  |         { | ||||||
|  |             var optionsBuilder = new DbContextOptionsBuilder<IntegrationEventLogContext>(); | ||||||
|  | 
 | ||||||
|  |             optionsBuilder.UseSqlServer(".", options => options.MigrationsAssembly(GetType().Assembly.GetName().Name)); | ||||||
|  | 
 | ||||||
|  |             return new IntegrationEventLogContext(optionsBuilder.Options); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -1,8 +1,9 @@ | |||||||
| using System; | // <auto-generated /> | ||||||
|  | using System; | ||||||
| using Microsoft.EntityFrameworkCore; | using Microsoft.EntityFrameworkCore; | ||||||
| using Microsoft.EntityFrameworkCore.Infrastructure; | using Microsoft.EntityFrameworkCore.Infrastructure; | ||||||
| using Microsoft.EntityFrameworkCore.Metadata; | using Microsoft.EntityFrameworkCore.Metadata; | ||||||
| using Microsoft.EntityFrameworkCore.Migrations; | using Microsoft.EntityFrameworkCore.Storage.ValueConversion; | ||||||
| using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF; | using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF; | ||||||
| 
 | 
 | ||||||
| namespace Catalog.API.Migrations | namespace Catalog.API.Migrations | ||||||
| @ -12,8 +13,10 @@ namespace Catalog.API.Migrations | |||||||
|     { |     { | ||||||
|         protected override void BuildModel(ModelBuilder modelBuilder) |         protected override void BuildModel(ModelBuilder modelBuilder) | ||||||
|         { |         { | ||||||
|  | #pragma warning disable 612, 618 | ||||||
|             modelBuilder |             modelBuilder | ||||||
|                 .HasAnnotation("ProductVersion", "1.1.1") |                 .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") | ||||||
|  |                 .HasAnnotation("Relational:MaxIdentifierLength", 128) | ||||||
|                 .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); |                 .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); | ||||||
| 
 | 
 | ||||||
|             modelBuilder.Entity("Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF.IntegrationEventLogEntry", b => |             modelBuilder.Entity("Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF.IntegrationEventLogEntry", b => | ||||||
| @ -33,10 +36,13 @@ namespace Catalog.API.Migrations | |||||||
| 
 | 
 | ||||||
|                     b.Property<int>("TimesSent"); |                     b.Property<int>("TimesSent"); | ||||||
| 
 | 
 | ||||||
|  |                     b.Property<string>("TransactionId"); | ||||||
|  | 
 | ||||||
|                     b.HasKey("EventId"); |                     b.HasKey("EventId"); | ||||||
| 
 | 
 | ||||||
|                     b.ToTable("IntegrationEventLog"); |                     b.ToTable("IntegrationEventLog"); | ||||||
|                 }); |                 }); | ||||||
|  | #pragma warning restore 612, 618 | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -62,7 +62,7 @@ namespace Catalog.API.IntegrationEvents | |||||||
|             { |             { | ||||||
|                 // Achieving atomicity between original catalog database operation and the IntegrationEventLog thanks to a local transaction |                 // Achieving atomicity between original catalog database operation and the IntegrationEventLog thanks to a local transaction | ||||||
|                 await _catalogContext.SaveChangesAsync(); |                 await _catalogContext.SaveChangesAsync(); | ||||||
|                 await _eventLogService.SaveEventAsync(evt, _catalogContext.Database.CurrentTransaction.GetDbTransaction()); |                 await _eventLogService.SaveEventAsync(evt, _catalogContext.Database.CurrentTransaction); | ||||||
|             }); |             }); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ using Microsoft.AspNetCore.Mvc; | |||||||
| using Microsoft.eShopOnContainers.Services.Identity.API.Models; | using Microsoft.eShopOnContainers.Services.Identity.API.Models; | ||||||
| using Microsoft.eShopOnContainers.Services.Identity.API.Models.AccountViewModels; | using Microsoft.eShopOnContainers.Services.Identity.API.Models.AccountViewModels; | ||||||
| using Microsoft.eShopOnContainers.Services.Identity.API.Services; | using Microsoft.eShopOnContainers.Services.Identity.API.Services; | ||||||
|  | using Microsoft.Extensions.Configuration; | ||||||
| using Microsoft.Extensions.Logging; | using Microsoft.Extensions.Logging; | ||||||
| 
 | 
 | ||||||
| namespace Microsoft.eShopOnContainers.Services.Identity.API.Controllers | namespace Microsoft.eShopOnContainers.Services.Identity.API.Controllers | ||||||
| @ -32,6 +33,7 @@ namespace Microsoft.eShopOnContainers.Services.Identity.API.Controllers | |||||||
|         private readonly IClientStore _clientStore; |         private readonly IClientStore _clientStore; | ||||||
|         private readonly ILogger<AccountController> _logger; |         private readonly ILogger<AccountController> _logger; | ||||||
|         private readonly UserManager<ApplicationUser> _userManager; |         private readonly UserManager<ApplicationUser> _userManager; | ||||||
|  |         private readonly IConfiguration _configuration; | ||||||
| 
 | 
 | ||||||
|         public AccountController( |         public AccountController( | ||||||
| 
 | 
 | ||||||
| @ -40,13 +42,15 @@ namespace Microsoft.eShopOnContainers.Services.Identity.API.Controllers | |||||||
|             IIdentityServerInteractionService interaction, |             IIdentityServerInteractionService interaction, | ||||||
|             IClientStore clientStore, |             IClientStore clientStore, | ||||||
|             ILogger<AccountController> logger, |             ILogger<AccountController> logger, | ||||||
|             UserManager<ApplicationUser> userManager) |             UserManager<ApplicationUser> userManager, | ||||||
|  |             IConfiguration configuration) | ||||||
|         { |         { | ||||||
|             _loginService = loginService; |             _loginService = loginService; | ||||||
|             _interaction = interaction; |             _interaction = interaction; | ||||||
|             _clientStore = clientStore; |             _clientStore = clientStore; | ||||||
|             _logger = logger; |             _logger = logger; | ||||||
|             _userManager = userManager; |             _userManager = userManager; | ||||||
|  |             _configuration = configuration; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         /// <summary> |         /// <summary> | ||||||
| @ -81,20 +85,21 @@ namespace Microsoft.eShopOnContainers.Services.Identity.API.Controllers | |||||||
| 
 | 
 | ||||||
|                 if (await _loginService.ValidateCredentials(user, model.Password)) |                 if (await _loginService.ValidateCredentials(user, model.Password)) | ||||||
|                 { |                 { | ||||||
|  |                     var tokenLifetime = _configuration.GetValue("TokenLifetimeMinutes", 120); | ||||||
|  | 
 | ||||||
|                     var props = new AuthenticationProperties |                     var props = new AuthenticationProperties | ||||||
|                     { |                     { | ||||||
|                         ExpiresUtc = DateTimeOffset.UtcNow.AddHours(2), |                         ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(tokenLifetime), | ||||||
|                         AllowRefresh = true, |                         AllowRefresh = true, | ||||||
|                         RedirectUri = model.ReturnUrl |                         RedirectUri = model.ReturnUrl | ||||||
|                     }; |                     }; | ||||||
| 
 | 
 | ||||||
|                     if (model.RememberMe) |                     if (model.RememberMe) | ||||||
|                     { |                     { | ||||||
|                         props = new AuthenticationProperties |                         var permanentTokenLifetime = _configuration.GetValue("PermanentTokenLifetimeDays", 365); | ||||||
|                         { | 
 | ||||||
|                             IsPersistent = true, |                         props.ExpiresUtc = DateTimeOffset.UtcNow.AddDays(permanentTokenLifetime); | ||||||
|                             ExpiresUtc = DateTimeOffset.UtcNow.AddYears(10) |                         props.IsPersistent = true; | ||||||
|                         }; |  | ||||||
|                     }; |                     }; | ||||||
| 
 | 
 | ||||||
|                     await _loginService.SignInAsync(user, props); |                     await _loginService.SignInAsync(user, props); | ||||||
|  | |||||||
| @ -4,13 +4,23 @@ EXPOSE 80 | |||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
| WORKDIR /src/src/Services/Identity/Identity.API | WORKDIR /src/src/Services/Identity/Identity.API | ||||||
| RUN dotnet restore -nowarn:msb3202,nu1503 | RUN dotnet publish -c Release -o /app | ||||||
| RUN dotnet build --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM build AS publish | FROM build AS publish | ||||||
| RUN dotnet publish --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  | |||||||
| @ -25,5 +25,7 @@ | |||||||
|     "Name": "eshop", |     "Name": "eshop", | ||||||
|     "ClientId": "your-clien-id", |     "ClientId": "your-clien-id", | ||||||
|     "ClientSecret": "your-client-secret" |     "ClientSecret": "your-client-secret" | ||||||
|   } |   }, | ||||||
|  |   "TokenLifetimeMinutes": 120, | ||||||
|  |   "PermanentTokenLifetimeDays": 365 | ||||||
| } | } | ||||||
|  | |||||||
| @ -4,16 +4,26 @@ EXPOSE 80 | |||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
| WORKDIR /src/src/Services/Location/Locations.API | WORKDIR /src/src/Services/Location/Locations.API | ||||||
| RUN dotnet restore -nowarn:msb3202,nu1503 | RUN dotnet publish -c Release -o /app | ||||||
| RUN dotnet build --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM build as functionaltest | FROM build as functionaltest | ||||||
| WORKDIR /src/src/Services/Location/Locations.FunctionalTests | WORKDIR /src/src/Services/Location/Locations.FunctionalTests | ||||||
| 
 | 
 | ||||||
| FROM build AS publish | FROM build AS publish | ||||||
| RUN dotnet publish --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  | |||||||
| @ -4,16 +4,26 @@ EXPOSE 80 | |||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
| WORKDIR /src/src/Services/Marketing/Marketing.API | WORKDIR /src/src/Services/Marketing/Marketing.API | ||||||
| RUN dotnet restore -nowarn:msb3202,nu1503 | RUN dotnet publish -c Release -o /app | ||||||
| RUN dotnet build --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM build as functionaltest | FROM build as functionaltest | ||||||
| WORKDIR /src/src/Services/Marketing/Marketing.FunctionalTests | WORKDIR /src/src/Services/Marketing/Marketing.FunctionalTests | ||||||
| 
 | 
 | ||||||
| FROM build AS publish | FROM build AS publish | ||||||
| RUN dotnet publish --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  | |||||||
| @ -19,7 +19,7 @@ | |||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <PackageReference Include="Microsoft.AspNetCore.App" /> |     <PackageReference Include="Microsoft.AspNetCore.App" /> | ||||||
|     <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.2.0" /> |     <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.2.0" /> | ||||||
|     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" /> |     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" /> | ||||||
|     <PackageReference Include="Microsoft.AspNetCore.TestHost" Version="2.2.0" /> |     <PackageReference Include="Microsoft.AspNetCore.TestHost" Version="2.2.0" /> | ||||||
|     <PackageReference Include="xunit" Version="2.4.1" /> |     <PackageReference Include="xunit" Version="2.4.1" /> | ||||||
|     <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1"> |     <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1"> | ||||||
| @ -30,7 +30,6 @@ | |||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
| 
 | 
 | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ProjectReference Include="..\..\..\Web\WebMVC\WebMVC.csproj" /> |  | ||||||
|     <ProjectReference Include="..\Marketing.API\Marketing.API.csproj" /> |     <ProjectReference Include="..\Marketing.API\Marketing.API.csproj" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -28,7 +28,7 @@ namespace Marketing.FunctionalTests | |||||||
|         [Fact] |         [Fact] | ||||||
|         public async Task Post_add_new_user_location_rule_and_response_ok_status_code() |         public async Task Post_add_new_user_location_rule_and_response_ok_status_code() | ||||||
|         { |         { | ||||||
|             var campaignId = 81; |             var campaignId = 2; | ||||||
| 
 | 
 | ||||||
|             using (var server = CreateServer()) |             using (var server = CreateServer()) | ||||||
|             { |             { | ||||||
| @ -44,7 +44,7 @@ namespace Marketing.FunctionalTests | |||||||
|         [Fact] |         [Fact] | ||||||
|         public async Task Delete_delete_user_location_role_and_response_not_content_status_code() |         public async Task Delete_delete_user_location_role_and_response_not_content_status_code() | ||||||
|         { |         { | ||||||
|             var campaignId = 81; |             var campaignId = 2; | ||||||
| 
 | 
 | ||||||
|             using (var server = CreateServer()) |             using (var server = CreateServer()) | ||||||
|             { |             { | ||||||
|  | |||||||
| @ -42,6 +42,8 @@ namespace Ordering.API.Application.Behaviors | |||||||
| 
 | 
 | ||||||
|                 await strategy.ExecuteAsync(async () => |                 await strategy.ExecuteAsync(async () => | ||||||
|                 { |                 { | ||||||
|  |                     Guid transactionId; | ||||||
|  | 
 | ||||||
|                     using (var transaction = await _dbContext.BeginTransactionAsync()) |                     using (var transaction = await _dbContext.BeginTransactionAsync()) | ||||||
|                     using (LogContext.PushProperty("TransactionContext", transaction.TransactionId)) |                     using (LogContext.PushProperty("TransactionContext", transaction.TransactionId)) | ||||||
|                     { |                     { | ||||||
| @ -52,9 +54,11 @@ namespace Ordering.API.Application.Behaviors | |||||||
|                         _logger.LogInformation("----- Commit transaction {TransactionId} for {CommandName}", transaction.TransactionId, typeName); |                         _logger.LogInformation("----- Commit transaction {TransactionId} for {CommandName}", transaction.TransactionId, typeName); | ||||||
| 
 | 
 | ||||||
|                         await _dbContext.CommitTransactionAsync(transaction); |                         await _dbContext.CommitTransactionAsync(transaction); | ||||||
|  | 
 | ||||||
|  |                         transactionId = transaction.TransactionId; | ||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
|                     await _orderingIntegrationEventService.PublishEventsThroughEventBusAsync(); |                     await _orderingIntegrationEventService.PublishEventsThroughEventBusAsync(transactionId); | ||||||
|                 }); |                 }); | ||||||
| 
 | 
 | ||||||
|                 return response; |                 return response; | ||||||
|  | |||||||
| @ -33,7 +33,7 @@ namespace Ordering.API.Application.Commands | |||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             orderToUpdate.SetCancelledStatus(); |             orderToUpdate.SetCancelledStatus(); | ||||||
|             return await _orderRepository.UnitOfWork.SaveEntitiesAsync(); |             return await _orderRepository.UnitOfWork.SaveEntitiesAsync(cancellationToken); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -58,7 +58,7 @@ | |||||||
|             _orderRepository.Add(order); |             _orderRepository.Add(order); | ||||||
| 
 | 
 | ||||||
|             return await _orderRepository.UnitOfWork |             return await _orderRepository.UnitOfWork | ||||||
|                 .SaveEntitiesAsync(); |                 .SaveEntitiesAsync(cancellationToken); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -96,7 +96,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands | |||||||
|                         command); |                         command); | ||||||
| 
 | 
 | ||||||
|                     // Send the embeded business command to mediator so it runs its related CommandHandler  |                     // Send the embeded business command to mediator so it runs its related CommandHandler  | ||||||
|                     var result = await _mediator.Send(command); |                     var result = await _mediator.Send(command, cancellationToken); | ||||||
| 
 | 
 | ||||||
|                     _logger.LogInformation( |                     _logger.LogInformation( | ||||||
|                         "----- Command result: {@Result} - {CommandName} - {IdProperty}: {CommandId} ({@Command})", |                         "----- Command result: {@Result} - {CommandName} - {IdProperty}: {CommandId} ({@Command})", | ||||||
|  | |||||||
| @ -33,7 +33,7 @@ namespace Ordering.API.Application.Commands | |||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             orderToUpdate.SetAwaitingValidationStatus(); |             orderToUpdate.SetAwaitingValidationStatus(); | ||||||
|             return await _orderRepository.UnitOfWork.SaveEntitiesAsync(); |             return await _orderRepository.UnitOfWork.SaveEntitiesAsync(cancellationToken); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -27,7 +27,7 @@ namespace Ordering.API.Application.Commands | |||||||
|         public async Task<bool> Handle(SetPaidOrderStatusCommand command, CancellationToken cancellationToken) |         public async Task<bool> Handle(SetPaidOrderStatusCommand command, CancellationToken cancellationToken) | ||||||
|         { |         { | ||||||
|             // Simulate a work time for validating the payment |             // Simulate a work time for validating the payment | ||||||
|             await Task.Delay(10000); |             await Task.Delay(10000, cancellationToken); | ||||||
| 
 | 
 | ||||||
|             var orderToUpdate = await _orderRepository.GetAsync(command.OrderNumber); |             var orderToUpdate = await _orderRepository.GetAsync(command.OrderNumber); | ||||||
|             if(orderToUpdate == null) |             if(orderToUpdate == null) | ||||||
| @ -36,7 +36,7 @@ namespace Ordering.API.Application.Commands | |||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             orderToUpdate.SetPaidStatus(); |             orderToUpdate.SetPaidStatus(); | ||||||
|             return await _orderRepository.UnitOfWork.SaveEntitiesAsync(); |             return await _orderRepository.UnitOfWork.SaveEntitiesAsync(cancellationToken); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -27,7 +27,7 @@ namespace Ordering.API.Application.Commands | |||||||
|         public async Task<bool> Handle(SetStockConfirmedOrderStatusCommand command, CancellationToken cancellationToken) |         public async Task<bool> Handle(SetStockConfirmedOrderStatusCommand command, CancellationToken cancellationToken) | ||||||
|         { |         { | ||||||
|             // Simulate a work time for confirming the stock |             // Simulate a work time for confirming the stock | ||||||
|             await Task.Delay(10000); |             await Task.Delay(10000, cancellationToken); | ||||||
| 
 | 
 | ||||||
|             var orderToUpdate = await _orderRepository.GetAsync(command.OrderNumber); |             var orderToUpdate = await _orderRepository.GetAsync(command.OrderNumber); | ||||||
|             if(orderToUpdate == null) |             if(orderToUpdate == null) | ||||||
| @ -36,7 +36,7 @@ namespace Ordering.API.Application.Commands | |||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             orderToUpdate.SetStockConfirmedStatus(); |             orderToUpdate.SetStockConfirmedStatus(); | ||||||
|             return await _orderRepository.UnitOfWork.SaveEntitiesAsync(); |             return await _orderRepository.UnitOfWork.SaveEntitiesAsync(cancellationToken); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -27,7 +27,7 @@ namespace Ordering.API.Application.Commands | |||||||
|         public async Task<bool> Handle(SetStockRejectedOrderStatusCommand command, CancellationToken cancellationToken) |         public async Task<bool> Handle(SetStockRejectedOrderStatusCommand command, CancellationToken cancellationToken) | ||||||
|         { |         { | ||||||
|             // Simulate a work time for rejecting the stock |             // Simulate a work time for rejecting the stock | ||||||
|             await Task.Delay(10000); |             await Task.Delay(10000, cancellationToken); | ||||||
| 
 | 
 | ||||||
|             var orderToUpdate = await _orderRepository.GetAsync(command.OrderNumber); |             var orderToUpdate = await _orderRepository.GetAsync(command.OrderNumber); | ||||||
|             if(orderToUpdate == null) |             if(orderToUpdate == null) | ||||||
| @ -37,7 +37,7 @@ namespace Ordering.API.Application.Commands | |||||||
| 
 | 
 | ||||||
|             orderToUpdate.SetCancelledStatusWhenStockIsRejected(command.OrderStockItems); |             orderToUpdate.SetCancelledStatusWhenStockIsRejected(command.OrderStockItems); | ||||||
| 
 | 
 | ||||||
|             return await _orderRepository.UnitOfWork.SaveEntitiesAsync(); |             return await _orderRepository.UnitOfWork.SaveEntitiesAsync(cancellationToken); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -33,7 +33,7 @@ namespace Ordering.API.Application.Commands | |||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             orderToUpdate.SetShippedStatus(); |             orderToUpdate.SetShippedStatus(); | ||||||
|             return await _orderRepository.UnitOfWork.SaveEntitiesAsync(); |             return await _orderRepository.UnitOfWork.SaveEntitiesAsync(cancellationToken); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -56,7 +56,7 @@ namespace Ordering.API.Application.DomainEventHandlers.OrderStartedEvent | |||||||
|                 _buyerRepository.Add(buyer); |                 _buyerRepository.Add(buyer); | ||||||
| 
 | 
 | ||||||
|             await _buyerRepository.UnitOfWork |             await _buyerRepository.UnitOfWork | ||||||
|                 .SaveEntitiesAsync(); |                 .SaveEntitiesAsync(cancellationToken); | ||||||
| 
 | 
 | ||||||
|             var orderStatusChangedTosubmittedIntegrationEvent = new OrderStatusChangedToSubmittedIntegrationEvent(orderStartedEvent.Order.Id, orderStartedEvent.Order.OrderStatus.Name, buyer.Name); |             var orderStatusChangedTosubmittedIntegrationEvent = new OrderStatusChangedToSubmittedIntegrationEvent(orderStartedEvent.Order.Id, orderStartedEvent.Order.OrderStatus.Name, buyer.Name); | ||||||
|             await _orderingIntegrationEventService.AddAndSaveEventAsync(orderStatusChangedTosubmittedIntegrationEvent); |             await _orderingIntegrationEventService.AddAndSaveEventAsync(orderStatusChangedTosubmittedIntegrationEvent); | ||||||
|  | |||||||
| @ -1,11 +1,12 @@ | |||||||
| using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events; | using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events; | ||||||
|  | using System; | ||||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||||
| 
 | 
 | ||||||
| namespace Ordering.API.Application.IntegrationEvents | namespace Ordering.API.Application.IntegrationEvents | ||||||
| { | { | ||||||
|     public interface IOrderingIntegrationEventService |     public interface IOrderingIntegrationEventService | ||||||
|     { |     { | ||||||
|         Task PublishEventsThroughEventBusAsync(); |         Task PublishEventsThroughEventBusAsync(Guid transactionId); | ||||||
|         Task AddAndSaveEventAsync(IntegrationEvent evt); |         Task AddAndSaveEventAsync(IntegrationEvent evt); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -39,11 +39,11 @@ namespace Ordering.API.Application.IntegrationEvents | |||||||
|             _logger = logger ?? throw new ArgumentNullException(nameof(logger)); |             _logger = logger ?? throw new ArgumentNullException(nameof(logger)); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public async Task PublishEventsThroughEventBusAsync() |         public async Task PublishEventsThroughEventBusAsync(Guid transactionId) | ||||||
|         { |         { | ||||||
|             var pendindLogEvents = await _eventLogService.RetrieveEventLogsPendingToPublishAsync(); |             var pendingLogEvents = await _eventLogService.RetrieveEventLogsPendingToPublishAsync(transactionId); | ||||||
| 
 | 
 | ||||||
|             foreach (var logEvt in pendindLogEvents) |             foreach (var logEvt in pendingLogEvents) | ||||||
|             { |             { | ||||||
|                 _logger.LogInformation("----- Publishing integration event: {IntegrationEventId} from {AppName} - ({@IntegrationEvent})", logEvt.EventId, Program.AppName, logEvt.IntegrationEvent); |                 _logger.LogInformation("----- Publishing integration event: {IntegrationEventId} from {AppName} - ({@IntegrationEvent})", logEvt.EventId, Program.AppName, logEvt.IntegrationEvent); | ||||||
| 
 | 
 | ||||||
| @ -66,7 +66,7 @@ namespace Ordering.API.Application.IntegrationEvents | |||||||
|         { |         { | ||||||
|             _logger.LogInformation("----- Enqueuing integration event {IntegrationEventId} to repository ({@IntegrationEvent})", evt.Id, evt); |             _logger.LogInformation("----- Enqueuing integration event {IntegrationEventId} to repository ({@IntegrationEvent})", evt.Id, evt); | ||||||
| 
 | 
 | ||||||
|             await _eventLogService.SaveEventAsync(evt, _orderingContext.GetCurrentTransaction.GetDbTransaction()); |             await _eventLogService.SaveEventAsync(evt, _orderingContext.GetCurrentTransaction()); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -4,19 +4,29 @@ EXPOSE 80 | |||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
| WORKDIR /src/src/Services/Ordering/Ordering.API | WORKDIR /src/src/Services/Ordering/Ordering.API | ||||||
| RUN dotnet restore -nowarn:msb3202,nu1503 | RUN dotnet publish -c Release -o /app | ||||||
| RUN dotnet build --no-restore -c Release -o /app |  | ||||||
| 
 |  | ||||||
| FROM build as functionaltest |  | ||||||
| WORKDIR /src/src/Services/Ordering/Ordering.FunctionalTests |  | ||||||
| 
 | 
 | ||||||
| FROM build as unittest | FROM build as unittest | ||||||
| WORKDIR /src/src/Services/Ordering/Ordering.UnitTests | WORKDIR /src/src/Services/Ordering/Ordering.UnitTests | ||||||
| 
 | 
 | ||||||
|  | FROM build as functionaltest | ||||||
|  | WORKDIR /src/src/Services/Ordering/Ordering.FunctionalTests | ||||||
|  | 
 | ||||||
| FROM build AS publish | FROM build AS publish | ||||||
| RUN dotnet publish --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  | |||||||
| @ -0,0 +1,50 @@ | |||||||
|  | // <auto-generated /> | ||||||
|  | using System; | ||||||
|  | using Microsoft.EntityFrameworkCore; | ||||||
|  | using Microsoft.EntityFrameworkCore.Infrastructure; | ||||||
|  | using Microsoft.EntityFrameworkCore.Metadata; | ||||||
|  | using Microsoft.EntityFrameworkCore.Migrations; | ||||||
|  | using Microsoft.EntityFrameworkCore.Storage.ValueConversion; | ||||||
|  | using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF; | ||||||
|  | 
 | ||||||
|  | namespace Ordering.API.Infrastructure.IntegrationEventMigrations | ||||||
|  | { | ||||||
|  |     [DbContext(typeof(IntegrationEventLogContext))] | ||||||
|  |     [Migration("20190507185219_AddTransactionId")] | ||||||
|  |     partial class AddTransactionId | ||||||
|  |     { | ||||||
|  |         protected override void BuildTargetModel(ModelBuilder modelBuilder) | ||||||
|  |         { | ||||||
|  | #pragma warning disable 612, 618 | ||||||
|  |             modelBuilder | ||||||
|  |                 .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") | ||||||
|  |                 .HasAnnotation("Relational:MaxIdentifierLength", 128) | ||||||
|  |                 .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); | ||||||
|  | 
 | ||||||
|  |             modelBuilder.Entity("Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF.IntegrationEventLogEntry", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<Guid>("EventId") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  | 
 | ||||||
|  |                     b.Property<string>("Content") | ||||||
|  |                         .IsRequired(); | ||||||
|  | 
 | ||||||
|  |                     b.Property<DateTime>("CreationTime"); | ||||||
|  | 
 | ||||||
|  |                     b.Property<string>("EventTypeName") | ||||||
|  |                         .IsRequired(); | ||||||
|  | 
 | ||||||
|  |                     b.Property<int>("State"); | ||||||
|  | 
 | ||||||
|  |                     b.Property<int>("TimesSent"); | ||||||
|  | 
 | ||||||
|  |                     b.Property<string>("TransactionId"); | ||||||
|  | 
 | ||||||
|  |                     b.HasKey("EventId"); | ||||||
|  | 
 | ||||||
|  |                     b.ToTable("IntegrationEventLog"); | ||||||
|  |                 }); | ||||||
|  | #pragma warning restore 612, 618 | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,22 @@ | |||||||
|  | using Microsoft.EntityFrameworkCore.Migrations; | ||||||
|  | 
 | ||||||
|  | namespace Ordering.API.Infrastructure.IntegrationEventMigrations | ||||||
|  | { | ||||||
|  |     public partial class AddTransactionId : Migration | ||||||
|  |     { | ||||||
|  |         protected override void Up(MigrationBuilder migrationBuilder) | ||||||
|  |         { | ||||||
|  |             migrationBuilder.AddColumn<string>( | ||||||
|  |                 name: "TransactionId", | ||||||
|  |                 table: "IntegrationEventLog", | ||||||
|  |                 nullable: true); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected override void Down(MigrationBuilder migrationBuilder) | ||||||
|  |         { | ||||||
|  |             migrationBuilder.DropColumn( | ||||||
|  |                 name: "TransactionId", | ||||||
|  |                 table: "IntegrationEventLog"); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,18 @@ | |||||||
|  | using Microsoft.EntityFrameworkCore; | ||||||
|  | using Microsoft.EntityFrameworkCore.Design; | ||||||
|  | using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF; | ||||||
|  | 
 | ||||||
|  | namespace Catalog.API.Infrastructure.IntegrationEventMigrations | ||||||
|  | { | ||||||
|  |     public class IntegrationEventLogContextDesignTimeFactory : IDesignTimeDbContextFactory<IntegrationEventLogContext> | ||||||
|  |     { | ||||||
|  |         public IntegrationEventLogContext CreateDbContext(string[] args) | ||||||
|  |         { | ||||||
|  |             var optionsBuilder = new DbContextOptionsBuilder<IntegrationEventLogContext>(); | ||||||
|  | 
 | ||||||
|  |             optionsBuilder.UseSqlServer(".", options => options.MigrationsAssembly(GetType().Assembly.GetName().Name)); | ||||||
|  | 
 | ||||||
|  |             return new IntegrationEventLogContext(optionsBuilder.Options); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -1,8 +1,9 @@ | |||||||
| using System; | // <auto-generated /> | ||||||
|  | using System; | ||||||
| using Microsoft.EntityFrameworkCore; | using Microsoft.EntityFrameworkCore; | ||||||
| using Microsoft.EntityFrameworkCore.Infrastructure; | using Microsoft.EntityFrameworkCore.Infrastructure; | ||||||
| using Microsoft.EntityFrameworkCore.Metadata; | using Microsoft.EntityFrameworkCore.Metadata; | ||||||
| using Microsoft.EntityFrameworkCore.Migrations; | using Microsoft.EntityFrameworkCore.Storage.ValueConversion; | ||||||
| using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF; | using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF; | ||||||
| 
 | 
 | ||||||
| namespace Ordering.API.Infrastructure.IntegrationEventMigrations | namespace Ordering.API.Infrastructure.IntegrationEventMigrations | ||||||
| @ -12,8 +13,10 @@ namespace Ordering.API.Infrastructure.IntegrationEventMigrations | |||||||
|     { |     { | ||||||
|         protected override void BuildModel(ModelBuilder modelBuilder) |         protected override void BuildModel(ModelBuilder modelBuilder) | ||||||
|         { |         { | ||||||
|  | #pragma warning disable 612, 618 | ||||||
|             modelBuilder |             modelBuilder | ||||||
|                 .HasAnnotation("ProductVersion", "1.1.1") |                 .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") | ||||||
|  |                 .HasAnnotation("Relational:MaxIdentifierLength", 128) | ||||||
|                 .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); |                 .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); | ||||||
| 
 | 
 | ||||||
|             modelBuilder.Entity("Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF.IntegrationEventLogEntry", b => |             modelBuilder.Entity("Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF.IntegrationEventLogEntry", b => | ||||||
| @ -33,10 +36,13 @@ namespace Ordering.API.Infrastructure.IntegrationEventMigrations | |||||||
| 
 | 
 | ||||||
|                     b.Property<int>("TimesSent"); |                     b.Property<int>("TimesSent"); | ||||||
| 
 | 
 | ||||||
|  |                     b.Property<string>("TransactionId"); | ||||||
|  | 
 | ||||||
|                     b.HasKey("EventId"); |                     b.HasKey("EventId"); | ||||||
| 
 | 
 | ||||||
|                     b.ToTable("IntegrationEventLog"); |                     b.ToTable("IntegrationEventLog"); | ||||||
|                 }); |                 }); | ||||||
|  | #pragma warning restore 612, 618 | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -4,13 +4,23 @@ EXPOSE 80 | |||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
| WORKDIR /src/src/Services/Ordering/Ordering.BackgroundTasks | WORKDIR /src/src/Services/Ordering/Ordering.BackgroundTasks | ||||||
| RUN dotnet restore -nowarn:msb3202,nu1503 | RUN dotnet publish -c Release -o /app | ||||||
| RUN dotnet build --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM build AS publish | FROM build AS publish | ||||||
| RUN dotnet publish --no-restore  -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  | |||||||
| @ -29,7 +29,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Infrastructure | |||||||
| 
 | 
 | ||||||
|         private OrderingContext(DbContextOptions<OrderingContext> options) : base(options) { } |         private OrderingContext(DbContextOptions<OrderingContext> options) : base(options) { } | ||||||
| 
 | 
 | ||||||
|         public IDbContextTransaction GetCurrentTransaction => _currentTransaction; |         public IDbContextTransaction GetCurrentTransaction() => _currentTransaction; | ||||||
| 
 | 
 | ||||||
|         public bool HasActiveTransaction => _currentTransaction != null; |         public bool HasActiveTransaction => _currentTransaction != null; | ||||||
| 
 | 
 | ||||||
| @ -64,7 +64,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Infrastructure | |||||||
| 
 | 
 | ||||||
|             // After executing this line all the changes (from the Command Handler and Domain Event Handlers)  |             // After executing this line all the changes (from the Command Handler and Domain Event Handlers)  | ||||||
|             // performed through the DbContext will be committed |             // performed through the DbContext will be committed | ||||||
|             var result = await base.SaveChangesAsync(); |             var result = await base.SaveChangesAsync(cancellationToken); | ||||||
| 
 | 
 | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -4,13 +4,23 @@ EXPOSE 80 | |||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
| WORKDIR /src/src/Services/Ordering/Ordering.SignalrHub | WORKDIR /src/src/Services/Ordering/Ordering.SignalrHub | ||||||
| RUN dotnet restore -nowarn:msb3202,nu1503 | RUN dotnet publish -c Release -o /app | ||||||
| RUN dotnet build  --no-restore  Ordering.SignalrHub.csproj -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM build AS publish | FROM build AS publish | ||||||
| RUN dotnet publish  --no-restore  Ordering.SignalrHub.csproj -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  | |||||||
| @ -4,13 +4,23 @@ EXPOSE 80 | |||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
| WORKDIR /src/src/Services/Payment/Payment.API | WORKDIR /src/src/Services/Payment/Payment.API | ||||||
| RUN dotnet restore -nowarn:msb3202,nu1503 | RUN dotnet publish -c Release -o /app | ||||||
| RUN dotnet build --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM build AS publish | FROM build AS publish | ||||||
| RUN dotnet publish --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  | |||||||
| @ -23,6 +23,8 @@ | |||||||
|             _eventBus = eventBus; |             _eventBus = eventBus; | ||||||
|             _settings = settings.Value; |             _settings = settings.Value; | ||||||
|             _logger = logger ?? throw new System.ArgumentNullException(nameof(logger)); |             _logger = logger ?? throw new System.ArgumentNullException(nameof(logger)); | ||||||
|  | 
 | ||||||
|  |             _logger.LogTrace("PaymentSettings: {@PaymentSettings}", _settings); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public async Task Handle(OrderStatusChangedToStockConfirmedIntegrationEvent @event) |         public async Task Handle(OrderStatusChangedToStockConfirmedIntegrationEvent @event) | ||||||
|  | |||||||
| @ -4,14 +4,23 @@ EXPOSE 80 | |||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
| COPY ["src/Services/Webhooks/Webhooks.API/Webhooks.API.csproj", "src/Services/Webhooks/Webhooks.API/"] | 
 | ||||||
| RUN dotnet restore "src/Services/Webhooks/Webhooks.API/Webhooks.API.csproj" | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
| WORKDIR "/src/src/Services/Webhooks/Webhooks.API" | WORKDIR "/src/src/Services/Webhooks/Webhooks.API" | ||||||
| RUN dotnet build "Webhooks.API.csproj" -c Release -o /app | RUN dotnet publish -c Release -o /app | ||||||
| 
 | 
 | ||||||
| FROM build AS publish | FROM build AS publish | ||||||
| RUN dotnet publish "Webhooks.API.csproj" -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  | |||||||
| @ -6,19 +6,29 @@ using System.Threading.Tasks; | |||||||
| using Microsoft.AspNetCore.Authentication; | using Microsoft.AspNetCore.Authentication; | ||||||
| using Microsoft.AspNetCore.Authentication.OpenIdConnect; | using Microsoft.AspNetCore.Authentication.OpenIdConnect; | ||||||
| using Microsoft.AspNetCore.Authentication.Cookies; | using Microsoft.AspNetCore.Authentication.Cookies; | ||||||
|  | using Microsoft.Extensions.Logging; | ||||||
|  | using System; | ||||||
| 
 | 
 | ||||||
| namespace Microsoft.eShopOnContainers.WebMVC.Controllers | namespace Microsoft.eShopOnContainers.WebMVC.Controllers | ||||||
| { | { | ||||||
|     [Authorize] |     [Authorize] | ||||||
|     public class AccountController : Controller |     public class AccountController : Controller | ||||||
|     { |     { | ||||||
|  |         private readonly ILogger<AccountController> _logger; | ||||||
|  | 
 | ||||||
|  |         public AccountController(ILogger<AccountController> logger) | ||||||
|  |         { | ||||||
|  |             _logger = logger ?? throw new ArgumentNullException(nameof(logger)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         [Authorize] |         [Authorize] | ||||||
|         public async Task<IActionResult> SignIn(string returnUrl) |         public async Task<IActionResult> SignIn(string returnUrl) | ||||||
|         { |         { | ||||||
|             var user = User as ClaimsPrincipal; |             var user = User as ClaimsPrincipal; | ||||||
| 
 |  | ||||||
|             var token = await HttpContext.GetTokenAsync("access_token"); |             var token = await HttpContext.GetTokenAsync("access_token"); | ||||||
| 
 | 
 | ||||||
|  |             _logger.LogInformation("----- User {@User} authenticated into {AppName}", user, Program.AppName); | ||||||
|  | 
 | ||||||
|             if (token != null) |             if (token != null) | ||||||
|             { |             { | ||||||
|                 ViewData["access_token"] = token; |                 ViewData["access_token"] = token; | ||||||
|  | |||||||
| @ -4,12 +4,23 @@ EXPOSE 80 | |||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
| WORKDIR /src/src/Web/WebMVC | WORKDIR /src/src/Web/WebMVC | ||||||
| RUN dotnet restore -nowarn:msb3202,nu1503 | RUN dotnet publish -c Release -o /app | ||||||
| 
 | 
 | ||||||
| FROM build AS publish | FROM build AS publish | ||||||
| RUN dotnet publish --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  | |||||||
| @ -238,6 +238,7 @@ namespace Microsoft.eShopOnContainers.WebMVC | |||||||
|             var useLoadTest = configuration.GetValue<bool>("UseLoadTest"); |             var useLoadTest = configuration.GetValue<bool>("UseLoadTest"); | ||||||
|             var identityUrl = configuration.GetValue<string>("IdentityUrl"); |             var identityUrl = configuration.GetValue<string>("IdentityUrl"); | ||||||
|             var callBackUrl = configuration.GetValue<string>("CallBackUrl"); |             var callBackUrl = configuration.GetValue<string>("CallBackUrl"); | ||||||
|  |             var sessionCookieLifetime = configuration.GetValue("SessionCookieLifetimeMinutes", 60); | ||||||
| 
 | 
 | ||||||
|             // Add Authentication services           |             // Add Authentication services           | ||||||
| 
 | 
 | ||||||
| @ -246,7 +247,7 @@ namespace Microsoft.eShopOnContainers.WebMVC | |||||||
|                 options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; |                 options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; | ||||||
|                 options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; |                 options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; | ||||||
|             }) |             }) | ||||||
|             .AddCookie(setup=>setup.ExpireTimeSpan = TimeSpan.FromHours(2)) |             .AddCookie(setup=>setup.ExpireTimeSpan = TimeSpan.FromMinutes(sessionCookieLifetime)) | ||||||
|             .AddOpenIdConnect(options => |             .AddOpenIdConnect(options => | ||||||
|             { |             { | ||||||
|                 options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; |                 options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; | ||||||
|  | |||||||
| @ -1,6 +1,8 @@ | |||||||
|  | @model CampaignItem | ||||||
|  | 
 | ||||||
| @{ | @{ | ||||||
|     ViewData["Title"] = "Campaign details"; |     ViewData["Title"] = "Campaign details"; | ||||||
|     @model CampaignItem | 
 | ||||||
|     var headerList= new List<Header>() { |     var headerList= new List<Header>() { | ||||||
|         new Header() { Controller = "Catalog", Text = "Back to catalog" }, |         new Header() { Controller = "Catalog", Text = "Back to catalog" }, | ||||||
|         new Header() { Controller = "Campaigns", Text = "Back to Campaigns" } }; |         new Header() { Controller = "Campaigns", Text = "Back to Campaigns" } }; | ||||||
| @ -18,7 +20,7 @@ | |||||||
|         <img class="card-img-top" src="@Model.PictureUri" alt="Card image cap"> |         <img class="card-img-top" src="@Model.PictureUri" alt="Card image cap"> | ||||||
|         <div class="card-body"> |         <div class="card-body"> | ||||||
|             <h4 class="card-title">@Model.Name</h4> |             <h4 class="card-title">@Model.Name</h4> | ||||||
|             <p class="card-text">@Model.Description</p>             |             <p class="card-text">@Model.Description</p> | ||||||
|         </div> |         </div> | ||||||
|         <div class="card-footer"> |         <div class="card-footer"> | ||||||
|             <small class="text-muted"> |             <small class="text-muted"> | ||||||
|  | |||||||
| @ -1,6 +1,8 @@ | |||||||
|  | @model WebMVC.ViewModels.CampaignViewModel | ||||||
|  | 
 | ||||||
| @{ | @{ | ||||||
|     ViewData["Title"] = "Campaigns"; |     ViewData["Title"] = "Campaigns"; | ||||||
|     @model WebMVC.ViewModels.CampaignViewModel | 
 | ||||||
|     var headerList= new List<Header>() { |     var headerList= new List<Header>() { | ||||||
|         new Header() { Controller = "Catalog", Text = "Back to catalog" } }; |         new Header() { Controller = "Catalog", Text = "Back to catalog" } }; | ||||||
| } | } | ||||||
| @ -11,23 +13,23 @@ | |||||||
|     </div> |     </div> | ||||||
| </section> | </section> | ||||||
| 
 | 
 | ||||||
| <partial name="_Header" model="headerList"/> | <partial name="_Header" model="headerList" /> | ||||||
| 
 | 
 | ||||||
| <div class="container"> | <div class="container"> | ||||||
|     <br /> |     <br /> | ||||||
|     <div class="row"> |     <div class="row"> | ||||||
|          | 
 | ||||||
|         @if (!ViewData.ModelState.IsValid) |         @if (!ViewData.ModelState.IsValid) | ||||||
|         { |         { | ||||||
|             <div class="alert alert-warning"> |         <div class="alert alert-warning"> | ||||||
|                 @Html.ValidationSummary(false) |             @Html.ValidationSummary(false) | ||||||
|             </div> |         </div> | ||||||
|         }         |         } | ||||||
| 
 | 
 | ||||||
|         <div class="col-md-12"> |         <div class="col-md-12"> | ||||||
|             <div class="esh-campaigns-items" style="font-weight: 300;"> |             <div class="esh-campaigns-items" style="font-weight: 300;"> | ||||||
|                 UPDATE USER LOCATION |                 UPDATE USER LOCATION | ||||||
|             </div>             |             </div> | ||||||
|             <br /> |             <br /> | ||||||
|             <form class="form-inline" asp-action="CreateNewUserLocation" method="post"> |             <form class="form-inline" asp-action="CreateNewUserLocation" method="post"> | ||||||
|                 <label class="sr-only" for="longitudeInput">Name</label> |                 <label class="sr-only" for="longitudeInput">Name</label> | ||||||
| @ -44,33 +46,33 @@ | |||||||
|                         <span class="input-group-text" id="inputGroup-sizing-default">Lon</span> |                         <span class="input-group-text" id="inputGroup-sizing-default">Lon</span> | ||||||
|                     </div> |                     </div> | ||||||
|                     <input type="text" class="form-control mb-2 mr-sm-2 mb-sm-0" id="longitudeInput" asp-for="Lon" placeholder="Longitude"> |                     <input type="text" class="form-control mb-2 mr-sm-2 mb-sm-0" id="longitudeInput" asp-for="Lon" placeholder="Longitude"> | ||||||
|                 </div>                |                 </div> | ||||||
| 
 | 
 | ||||||
|                 <div class="input-group mb-2 mr-sm-2 mb-sm-0 col-md-2"> |                 <div class="input-group mb-2 mr-sm-2 mb-sm-0 col-md-2"> | ||||||
|                     <input type="submit" value="Update" class="btn esh-campaigns-form-button" /> |                     <input type="submit" value="Update" class="btn esh-campaigns-form-button" /> | ||||||
|                 </div> |                 </div> | ||||||
|             </form> |             </form> | ||||||
|         </div>         |         </div> | ||||||
|     </div>     |     </div> | ||||||
|     <br /> |     <br /> | ||||||
|         @if (Model != null && Model.CampaignItems !=null && Model.CampaignItems.Any()) |     @if (Model != null && Model.CampaignItems !=null && Model.CampaignItems.Any()) | ||||||
|         { |         { | ||||||
|             <div class="card-group esh-campaigns-items row"> |     <div class="card-group esh-campaigns-items row"> | ||||||
|                 @foreach (var catalogItem in Model.CampaignItems) |         @foreach (var catalogItem in Model.CampaignItems) | ||||||
|                 { |                 { | ||||||
|                     <div class="esh-campaigns-item col-md-4"> |         <div class="esh-campaigns-item col-md-4"> | ||||||
|                         <partial name="_campaign" model="catalogItem"/> |             <partial name="_campaign" model="catalogItem" /> | ||||||
|                     </div> |         </div> | ||||||
|                 } |                 } | ||||||
|             </div> |     </div> | ||||||
| 
 | 
 | ||||||
|             <partial name="_pagination" for="PaginationInfo" /> |     <partial name="_pagination" for="PaginationInfo" /> | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             <div class="esh-campaigns-items row"> |     <div class="esh-campaigns-items row"> | ||||||
|                 THERE ARE NO CAMPAIGNS |         THERE ARE NO CAMPAIGNS | ||||||
|             </div> |     </div> | ||||||
|         } |         } | ||||||
| </div> | </div> | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| @{ | @model Microsoft.eShopOnContainers.WebMVC.ViewModels.CatalogViewModels.IndexViewModel | ||||||
|  | 
 | ||||||
|  | @{ | ||||||
|     ViewData["Title"] = "Catalog"; |     ViewData["Title"] = "Catalog"; | ||||||
|     @model Microsoft.eShopOnContainers.WebMVC.ViewModels.CatalogViewModels.IndexViewModel |  | ||||||
| } | } | ||||||
| <section class="esh-catalog-hero"> | <section class="esh-catalog-hero"> | ||||||
|     <div class="container"> |     <div class="container"> | ||||||
| @ -27,31 +28,31 @@ | |||||||
|         <br /> |         <br /> | ||||||
|         @if(ViewBag.BasketInoperativeMsg != null) |         @if(ViewBag.BasketInoperativeMsg != null) | ||||||
|         { |         { | ||||||
|             <div class="alert alert-warning" role="alert"> |         <div class="alert alert-warning" role="alert"> | ||||||
|                  @ViewBag.BasketInoperativeMsg |              @ViewBag.BasketInoperativeMsg | ||||||
|             </div> |         </div> | ||||||
|         } |         } | ||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
|     @if (Model.CatalogItems.Count() > 0) |     @if (Model.CatalogItems.Count() > 0) | ||||||
|     { |     { | ||||||
|         <partial name="_pagination" for="PaginationInfo" /> |     <partial name="_pagination" for="PaginationInfo" /> | ||||||
| 
 | 
 | ||||||
|         <div class="esh-catalog-items row"> |     <div class="esh-catalog-items row"> | ||||||
|             @foreach (var catalogItem in Model.CatalogItems) |         @foreach (var catalogItem in Model.CatalogItems) | ||||||
|             { |             { | ||||||
|                 <div class="esh-catalog-item col-md-4"> |         <div class="esh-catalog-item col-md-4"> | ||||||
|                     <partial name="_product" model="catalogItem"/> |             <partial name="_product" model="catalogItem" /> | ||||||
|                 </div> |  | ||||||
|             } |  | ||||||
|         </div> |         </div> | ||||||
|  |             } | ||||||
|  |     </div> | ||||||
| 
 | 
 | ||||||
|         <partial name="_pagination" for="PaginationInfo"/> |     <partial name="_pagination" for="PaginationInfo" /> | ||||||
|     } |     } | ||||||
|     else |     else | ||||||
|     { |     { | ||||||
|         <div class="esh-catalog-items row"> |     <div class="esh-catalog-items row"> | ||||||
|             THERE ARE NO RESULTS THAT MATCH YOUR SEARCH |         THERE ARE NO RESULTS THAT MATCH YOUR SEARCH | ||||||
|         </div> |     </div> | ||||||
|     } |     } | ||||||
| </div> | </div> | ||||||
|  | |||||||
| @ -74,11 +74,11 @@ | |||||||
|         <script src="~/js/site.js" asp-append-version="true"></script> |         <script src="~/js/site.js" asp-append-version="true"></script> | ||||||
|     </environment> |     </environment> | ||||||
|     <environment names="Staging,Production"> |     <environment names="Staging,Production"> | ||||||
|         <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js" |         <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" | ||||||
|                 asp-fallback-src="~/lib/jquery/jquery.min.js" |                 asp-fallback-src="~/lib/jquery/jquery.min.js" | ||||||
|                 asp-fallback-test="window.jQuery"> |                 asp-fallback-test="window.jQuery"> | ||||||
|         </script> |         </script> | ||||||
|         <script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js" |         <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js" | ||||||
|                 asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js" |                 asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js" | ||||||
|                 asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"> |                 asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"> | ||||||
|         </script> |         </script> | ||||||
|  | |||||||
| @ -27,5 +27,6 @@ | |||||||
|     "InstrumentationKey": "" |     "InstrumentationKey": "" | ||||||
|   }, |   }, | ||||||
|   "HttpClientRetryCount": 8, |   "HttpClientRetryCount": 8, | ||||||
|   "HttpClientExceptionsAllowedBeforeBreaking": 7 |   "HttpClientExceptionsAllowedBeforeBreaking": 7, | ||||||
| } |   "SessionCookieLifetimeMinutes": 60 | ||||||
|  | } | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ | |||||||
|   "defaultProvider": "cdnjs", |   "defaultProvider": "cdnjs", | ||||||
|   "libraries": [ |   "libraries": [ | ||||||
|     { |     { | ||||||
|       "library": "jquery@3.3.1", |       "library": "jquery@3.4.1", | ||||||
|       "destination": "wwwroot/lib/jquery/" |       "destination": "wwwroot/lib/jquery/" | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|  | |||||||
| @ -3,23 +3,33 @@ FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS base | |||||||
| WORKDIR /app | WORKDIR /app | ||||||
| EXPOSE 80 | EXPOSE 80 | ||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS dotnet-build |  | ||||||
| WORKDIR /src |  | ||||||
| 
 |  | ||||||
| FROM ${NODE_IMAGE} as node-build | FROM ${NODE_IMAGE} as node-build | ||||||
| WORKDIR /web | WORKDIR /web | ||||||
| COPY src/Web/WebSPA . | COPY src/Web/WebSPA . | ||||||
| RUN npm install | RUN npm install | ||||||
| RUN npm run build:prod | RUN npm run build:prod | ||||||
| 
 | 
 | ||||||
| FROM dotnet-build as publish | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src/src/Web/WebSPA/wwwroot |  | ||||||
| COPY --from=node-build /web/wwwroot . |  | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
|  | COPY --from=node-build /web/wwwroot /src/src/Web/WebSPA/wwwroot/ | ||||||
| WORKDIR /src/src/Web/WebSPA | WORKDIR /src/src/Web/WebSPA | ||||||
| RUN dotnet publish -c Release -o /app | RUN dotnet publish -c Release -o /app | ||||||
| 
 | 
 | ||||||
|  | FROM build AS publish | ||||||
|  | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
| COPY --from=publish /app . | COPY --from=publish /app . | ||||||
|  | |||||||
							
								
								
									
										18
									
								
								src/Web/WebSPA/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										18
									
								
								src/Web/WebSPA/package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -2371,7 +2371,7 @@ | |||||||
|     "arr-flatten": { |     "arr-flatten": { | ||||||
|       "version": "1.1.0", |       "version": "1.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", |       "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", | ||||||
|       "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=" |       "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" | ||||||
|     }, |     }, | ||||||
|     "arr-union": { |     "arr-union": { | ||||||
|       "version": "3.1.0", |       "version": "3.1.0", | ||||||
| @ -2835,7 +2835,7 @@ | |||||||
|     "bn.js": { |     "bn.js": { | ||||||
|       "version": "4.11.8", |       "version": "4.11.8", | ||||||
|       "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", |       "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", | ||||||
|       "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=", |       "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "body-parser": { |     "body-parser": { | ||||||
| @ -3344,7 +3344,7 @@ | |||||||
|     "cipher-base": { |     "cipher-base": { | ||||||
|       "version": "1.0.4", |       "version": "1.0.4", | ||||||
|       "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", |       "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", | ||||||
|       "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", |       "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "requires": { |       "requires": { | ||||||
|         "inherits": "^2.0.1", |         "inherits": "^2.0.1", | ||||||
| @ -5864,7 +5864,7 @@ | |||||||
|     "globals": { |     "globals": { | ||||||
|       "version": "9.18.0", |       "version": "9.18.0", | ||||||
|       "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", |       "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", | ||||||
|       "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=", |       "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "globby": { |     "globby": { | ||||||
| @ -6730,7 +6730,7 @@ | |||||||
|     "is-plain-object": { |     "is-plain-object": { | ||||||
|       "version": "2.0.4", |       "version": "2.0.4", | ||||||
|       "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", |       "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", | ||||||
|       "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", |       "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", | ||||||
|       "requires": { |       "requires": { | ||||||
|         "isobject": "^3.0.1" |         "isobject": "^3.0.1" | ||||||
|       } |       } | ||||||
| @ -6941,9 +6941,9 @@ | |||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "jquery": { |     "jquery": { | ||||||
|       "version": "3.3.1", |       "version": "3.4.1", | ||||||
|       "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", |       "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", | ||||||
|       "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" |       "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" | ||||||
|     }, |     }, | ||||||
|     "js-base64": { |     "js-base64": { | ||||||
|       "version": "2.5.1", |       "version": "2.5.1", | ||||||
| @ -7786,7 +7786,7 @@ | |||||||
|     "minimatch": { |     "minimatch": { | ||||||
|       "version": "3.0.4", |       "version": "3.0.4", | ||||||
|       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", |       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", | ||||||
|       "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", |       "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", | ||||||
|       "requires": { |       "requires": { | ||||||
|         "brace-expansion": "^1.1.7" |         "brace-expansion": "^1.1.7" | ||||||
|       } |       } | ||||||
|  | |||||||
| @ -44,7 +44,7 @@ | |||||||
|     "file-loader": "2.0.0", |     "file-loader": "2.0.0", | ||||||
|     "font-awesome": "4.7.0", |     "font-awesome": "4.7.0", | ||||||
|     "isomorphic-fetch": "2.2.1", |     "isomorphic-fetch": "2.2.1", | ||||||
|     "jquery": "^3.3.1", |     "jquery": "3.4.1", | ||||||
|     "ngx-toastr": "^9.0.2", |     "ngx-toastr": "^9.0.2", | ||||||
|     "normalize.css": "8.0.0", |     "normalize.css": "8.0.0", | ||||||
|     "popper.js": "^1.14.4", |     "popper.js": "^1.14.4", | ||||||
|  | |||||||
| @ -4,13 +4,23 @@ EXPOSE 80 | |||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
| WORKDIR /src/src/Web/WebStatus | WORKDIR /src/src/Web/WebStatus | ||||||
| RUN dotnet restore -nowarn:msb3202,nu1503 | RUN dotnet publish -c Release -o /app | ||||||
| RUN dotnet build --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM build AS publish | FROM build AS publish | ||||||
| RUN dotnet publish --no-restore -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  | |||||||
							
								
								
									
										37
									
								
								src/Web/WebStatus/Views/Shared/Error.cshtml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/Web/WebStatus/Views/Shared/Error.cshtml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | |||||||
|  |  | ||||||
|  | @{ | ||||||
|  |     Layout = null; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | 
 | ||||||
|  | <html> | ||||||
|  | <head> | ||||||
|  |     <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||||||
|  |     <title>Error</title> | ||||||
|  |     <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" /> | ||||||
|  | 
 | ||||||
|  |     <environment names="Development"> | ||||||
|  |         <link rel="stylesheet" href="~/css/site.min.css" type="text/css" /> | ||||||
|  |     </environment> | ||||||
|  |     <environment names="Staging,Production"> | ||||||
|  |         <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" /> | ||||||
|  |     </environment> | ||||||
|  | 
 | ||||||
|  | </head> | ||||||
|  | <body> | ||||||
|  |     <div class="container"> | ||||||
|  |         <h1 class="text-danger">Error.</h1> | ||||||
|  |         <h2 class="text-danger">An error occurred while processing your request.</h2> | ||||||
|  | 
 | ||||||
|  |         <h3>Development Mode</h3> | ||||||
|  | 
 | ||||||
|  |         <p> | ||||||
|  |             Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred. | ||||||
|  |         </p> | ||||||
|  |         <p> | ||||||
|  |             <strong>Development environment should not be enabled in deployed applications</strong>, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>, and restarting the application. | ||||||
|  |         </p> | ||||||
|  |     </div> | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
| @ -4,12 +4,6 @@ | |||||||
|     <AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback> |     <AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback> | ||||||
|     <DockerComposeProjectPath>..\..\..\docker-compose.dcproj</DockerComposeProjectPath> |     <DockerComposeProjectPath>..\..\..\docker-compose.dcproj</DockerComposeProjectPath> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   <ItemGroup> |  | ||||||
|     <Compile Remove="Views\**" /> |  | ||||||
|     <Content Remove="Views\**" /> |  | ||||||
|     <EmbeddedResource Remove="Views\**" /> |  | ||||||
|     <None Remove="Views\**" /> |  | ||||||
|   </ItemGroup> |  | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <PackageReference Include="AspNetCore.HealthChecks.UI" Version="2.2.22" /> |     <PackageReference Include="AspNetCore.HealthChecks.UI" Version="2.2.22" /> | ||||||
|     <PackageReference Include="AspNetCore.HealthChecks.UI.Client" Version="2.2.3" /> |     <PackageReference Include="AspNetCore.HealthChecks.UI.Client" Version="2.2.3" /> | ||||||
|  | |||||||
| @ -1,5 +1,75 @@ | |||||||
| { | { | ||||||
|   "HealthChecks-UI": { |   "HealthChecks-UI": { | ||||||
|  |     "HealthChecks": [ | ||||||
|  |       { | ||||||
|  |         "Name": "Ordering HTTP Check", | ||||||
|  |         "Uri": "http://localhost:5102/hc" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Name": "Ordering HTTP Background Check", | ||||||
|  |         "Uri": "http://localhost:5111/hc" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Name": "Basket HTTP Check", | ||||||
|  |         "Uri": "http://localhost:5103/hc" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Name": "Catalog HTTP Check", | ||||||
|  |         "Uri": "http://localhost:5101/hc" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Name": "Identity HTTP Check", | ||||||
|  |         "Uri": "http://localhost:5105/hc" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Name": "Marketing HTTP Check", | ||||||
|  |         "Uri": "http://localhost:5110/hc" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Name": "Locations HTTP Check", | ||||||
|  |         "Uri": "http://localhost:5109/hc" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Name": "Payments HTTP Check", | ||||||
|  |         "Uri": "http://localhost:5108/hc" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Name": "WebMVC HTTP Check", | ||||||
|  |         "Uri": "http://localhost:5100/hc" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Name": "WebSPA HTTP Check", | ||||||
|  |         "Uri": "http://localhost:5104/hc" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Name": "SignalR HTTP Check", | ||||||
|  |         "Uri": "http://localhost:5112/hc" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Name": "Mobile Shopping API GW HTTP Check", | ||||||
|  |         "Uri": "http://localhost:5200/hc" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Name": "Mobile Marketing API GW HTTP Check", | ||||||
|  |         "Uri": "http://localhost:5201/hc" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Name": "Web Shopping API GW HTTP Check", | ||||||
|  |         "Uri": "http://localhost:5202/hc" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Name": "Web Marketing API GW HTTP Check", | ||||||
|  |         "Uri": "http://localhost:5203/hc" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Name": "Mobile Shopping Aggregator HTTP Check", | ||||||
|  |         "Uri": "http://localhost:5120/hc" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Name": "Web Shopping Aggregator HTTP Check", | ||||||
|  |         "Uri": "http://localhost:5121/hc" | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|     "EvaluationTimeOnSeconds": 10, |     "EvaluationTimeOnSeconds": 10, | ||||||
|     "MinimumSecondsBetweenFailureNotifications": 60 |     "MinimumSecondsBetweenFailureNotifications": 60 | ||||||
|   }, |   }, | ||||||
| @ -14,13 +84,13 @@ | |||||||
|         "System": "Warning" |         "System": "Warning" | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     }, |   }, | ||||||
|     "Webhooks": [ |   "Webhooks": [ | ||||||
|       { |     { | ||||||
|         "Name": "", |       "Name": "", | ||||||
|         "Uri": "", |       "Uri": "", | ||||||
|         "Payload": "", |       "Payload": "", | ||||||
|         "RestoredPayload": "" |       "RestoredPayload": "" | ||||||
|       } |     } | ||||||
|     ] |   ] | ||||||
| } | } | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ | |||||||
|   "defaultProvider": "cdnjs", |   "defaultProvider": "cdnjs", | ||||||
|   "libraries": [ |   "libraries": [ | ||||||
|     { |     { | ||||||
|       "library": "jquery@3.3.1", |       "library": "jquery@3.4.1", | ||||||
|       "destination": "wwwroot/lib/jquery/" |       "destination": "wwwroot/lib/jquery/" | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|  | |||||||
| @ -5,14 +5,23 @@ EXPOSE 443 | |||||||
| 
 | 
 | ||||||
| FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build | ||||||
| WORKDIR /src | WORKDIR /src | ||||||
| COPY ["src/Web/WebhookClient/WebhookClient.csproj", "src/Web/WebhookClient/"] | 
 | ||||||
| RUN dotnet restore "src/Web/WebhookClient/WebhookClient.csproj" | COPY scripts scripts/ | ||||||
|  | 
 | ||||||
|  | COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Services/*/*/*.csproj /src/csproj-files/ | ||||||
|  | COPY src/Web/*/*.csproj /src/csproj-files/ | ||||||
|  | 
 | ||||||
|  | ARG RUN=pwd | ||||||
|  | RUN ${RUN} | ||||||
|  | 
 | ||||||
| COPY . . | COPY . . | ||||||
| WORKDIR "/src/src/Web/WebhookClient" | WORKDIR /src/src/Web/WebhookClient | ||||||
| RUN dotnet build "WebhookClient.csproj" -c Release -o /app | RUN dotnet publish -c Release -o /app | ||||||
| 
 | 
 | ||||||
| FROM build AS publish | FROM build AS publish | ||||||
| RUN dotnet publish "WebhookClient.csproj" -c Release -o /app |  | ||||||
| 
 | 
 | ||||||
| FROM base AS final | FROM base AS final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  | |||||||
| @ -59,11 +59,11 @@ | |||||||
|         <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script> |         <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script> | ||||||
|     </environment> |     </environment> | ||||||
|     <environment exclude="Development"> |     <environment exclude="Development"> | ||||||
|         <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" |         <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" | ||||||
|                 asp-fallback-src="~/lib/jquery/dist/jquery.min.js" |                 asp-fallback-src="~/lib/jquery/dist/jquery.min.js" | ||||||
|                 asp-fallback-test="window.jQuery" |                 asp-fallback-test="window.jQuery" | ||||||
|                 crossorigin="anonymous" |                 crossorigin="anonymous" | ||||||
|                 integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="> |                 integrity="sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw=="> | ||||||
|         </script> |         </script> | ||||||
|         <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.bundle.min.js" |         <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.bundle.min.js" | ||||||
|                 asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js" |                 asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js" | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| /*! | /*! | ||||||
|  * jQuery JavaScript Library v3.3.1 |  * jQuery JavaScript Library v3.4.1 | ||||||
|  * https://jquery.com/
 |  * https://jquery.com/
 | ||||||
|  * |  * | ||||||
|  * Includes Sizzle.js |  * Includes Sizzle.js | ||||||
| @ -9,7 +9,7 @@ | |||||||
|  * Released under the MIT license |  * Released under the MIT license | ||||||
|  * https://jquery.org/license
 |  * https://jquery.org/license
 | ||||||
|  * |  * | ||||||
|  * Date: 2018-01-20T17:24Z |  * Date: 2019-05-01T21:04Z | ||||||
|  */ |  */ | ||||||
| ( function( global, factory ) { | ( function( global, factory ) { | ||||||
| 
 | 
 | ||||||
| @ -91,20 +91,33 @@ var isWindow = function isWindow( obj ) { | |||||||
| 	var preservedScriptAttributes = { | 	var preservedScriptAttributes = { | ||||||
| 		type: true, | 		type: true, | ||||||
| 		src: true, | 		src: true, | ||||||
|  | 		nonce: true, | ||||||
| 		noModule: true | 		noModule: true | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	function DOMEval( code, doc, node ) { | 	function DOMEval( code, node, doc ) { | ||||||
| 		doc = doc || document; | 		doc = doc || document; | ||||||
| 
 | 
 | ||||||
| 		var i, | 		var i, val, | ||||||
| 			script = doc.createElement( "script" ); | 			script = doc.createElement( "script" ); | ||||||
| 
 | 
 | ||||||
| 		script.text = code; | 		script.text = code; | ||||||
| 		if ( node ) { | 		if ( node ) { | ||||||
| 			for ( i in preservedScriptAttributes ) { | 			for ( i in preservedScriptAttributes ) { | ||||||
| 				if ( node[ i ] ) { | 
 | ||||||
| 					script[ i ] = node[ i ]; | 				// Support: Firefox 64+, Edge 18+
 | ||||||
|  | 				// Some browsers don't support the "nonce" property on scripts.
 | ||||||
|  | 				// On the other hand, just using `getAttribute` is not enough as
 | ||||||
|  | 				// the `nonce` attribute is reset to an empty string whenever it
 | ||||||
|  | 				// becomes browsing-context connected.
 | ||||||
|  | 				// See https://github.com/whatwg/html/issues/2369
 | ||||||
|  | 				// See https://html.spec.whatwg.org/#nonce-attributes
 | ||||||
|  | 				// The `node.getAttribute` check was added for the sake of
 | ||||||
|  | 				// `jQuery.globalEval` so that it can fake a nonce-containing node
 | ||||||
|  | 				// via an object.
 | ||||||
|  | 				val = node[ i ] || node.getAttribute && node.getAttribute( i ); | ||||||
|  | 				if ( val ) { | ||||||
|  | 					script.setAttribute( i, val ); | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| @ -129,7 +142,7 @@ function toType( obj ) { | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| var | var | ||||||
| 	version = "3.3.1", | 	version = "3.4.1", | ||||||
| 
 | 
 | ||||||
| 	// Define a local copy of jQuery
 | 	// Define a local copy of jQuery
 | ||||||
| 	jQuery = function( selector, context ) { | 	jQuery = function( selector, context ) { | ||||||
| @ -258,25 +271,28 @@ jQuery.extend = jQuery.fn.extend = function() { | |||||||
| 
 | 
 | ||||||
| 			// Extend the base object
 | 			// Extend the base object
 | ||||||
| 			for ( name in options ) { | 			for ( name in options ) { | ||||||
| 				src = target[ name ]; |  | ||||||
| 				copy = options[ name ]; | 				copy = options[ name ]; | ||||||
| 
 | 
 | ||||||
|  | 				// Prevent Object.prototype pollution
 | ||||||
| 				// Prevent never-ending loop
 | 				// Prevent never-ending loop
 | ||||||
| 				if ( target === copy ) { | 				if ( name === "__proto__" || target === copy ) { | ||||||
| 					continue; | 					continue; | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				// Recurse if we're merging plain objects or arrays
 | 				// Recurse if we're merging plain objects or arrays
 | ||||||
| 				if ( deep && copy && ( jQuery.isPlainObject( copy ) || | 				if ( deep && copy && ( jQuery.isPlainObject( copy ) || | ||||||
| 					( copyIsArray = Array.isArray( copy ) ) ) ) { | 					( copyIsArray = Array.isArray( copy ) ) ) ) { | ||||||
|  | 					src = target[ name ]; | ||||||
| 
 | 
 | ||||||
| 					if ( copyIsArray ) { | 					// Ensure proper type for the source value
 | ||||||
| 						copyIsArray = false; | 					if ( copyIsArray && !Array.isArray( src ) ) { | ||||||
| 						clone = src && Array.isArray( src ) ? src : []; | 						clone = []; | ||||||
| 
 | 					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { | ||||||
|  | 						clone = {}; | ||||||
| 					} else { | 					} else { | ||||||
| 						clone = src && jQuery.isPlainObject( src ) ? src : {}; | 						clone = src; | ||||||
| 					} | 					} | ||||||
|  | 					copyIsArray = false; | ||||||
| 
 | 
 | ||||||
| 					// Never move original objects, clone them
 | 					// Never move original objects, clone them
 | ||||||
| 					target[ name ] = jQuery.extend( deep, clone, copy ); | 					target[ name ] = jQuery.extend( deep, clone, copy ); | ||||||
| @ -329,9 +345,6 @@ jQuery.extend( { | |||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
| 	isEmptyObject: function( obj ) { | 	isEmptyObject: function( obj ) { | ||||||
| 
 |  | ||||||
| 		/* eslint-disable no-unused-vars */ |  | ||||||
| 		// See https://github.com/eslint/eslint/issues/6125
 |  | ||||||
| 		var name; | 		var name; | ||||||
| 
 | 
 | ||||||
| 		for ( name in obj ) { | 		for ( name in obj ) { | ||||||
| @ -341,8 +354,8 @@ jQuery.extend( { | |||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
| 	// Evaluates a script in a global context
 | 	// Evaluates a script in a global context
 | ||||||
| 	globalEval: function( code ) { | 	globalEval: function( code, options ) { | ||||||
| 		DOMEval( code ); | 		DOMEval( code, { nonce: options && options.nonce } ); | ||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
| 	each: function( obj, callback ) { | 	each: function( obj, callback ) { | ||||||
| @ -498,14 +511,14 @@ function isArrayLike( obj ) { | |||||||
| } | } | ||||||
| var Sizzle = | var Sizzle = | ||||||
| /*! | /*! | ||||||
|  * Sizzle CSS Selector Engine v2.3.3 |  * Sizzle CSS Selector Engine v2.3.4 | ||||||
|  * https://sizzlejs.com/
 |  * https://sizzlejs.com/
 | ||||||
|  * |  * | ||||||
|  * Copyright jQuery Foundation and other contributors |  * Copyright JS Foundation and other contributors | ||||||
|  * Released under the MIT license |  * Released under the MIT license | ||||||
|  * http://jquery.org/license
 |  * https://js.foundation/
 | ||||||
|  * |  * | ||||||
|  * Date: 2016-08-08 |  * Date: 2019-04-08 | ||||||
|  */ |  */ | ||||||
| (function( window ) { | (function( window ) { | ||||||
| 
 | 
 | ||||||
| @ -539,6 +552,7 @@ var i, | |||||||
| 	classCache = createCache(), | 	classCache = createCache(), | ||||||
| 	tokenCache = createCache(), | 	tokenCache = createCache(), | ||||||
| 	compilerCache = createCache(), | 	compilerCache = createCache(), | ||||||
|  | 	nonnativeSelectorCache = createCache(), | ||||||
| 	sortOrder = function( a, b ) { | 	sortOrder = function( a, b ) { | ||||||
| 		if ( a === b ) { | 		if ( a === b ) { | ||||||
| 			hasDuplicate = true; | 			hasDuplicate = true; | ||||||
| @ -600,8 +614,7 @@ var i, | |||||||
| 
 | 
 | ||||||
| 	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), | 	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), | ||||||
| 	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), | 	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), | ||||||
| 
 | 	rdescend = new RegExp( whitespace + "|>" ), | ||||||
| 	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), |  | ||||||
| 
 | 
 | ||||||
| 	rpseudo = new RegExp( pseudos ), | 	rpseudo = new RegExp( pseudos ), | ||||||
| 	ridentifier = new RegExp( "^" + identifier + "$" ), | 	ridentifier = new RegExp( "^" + identifier + "$" ), | ||||||
| @ -622,6 +635,7 @@ var i, | |||||||
| 			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) | 			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) | ||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
|  | 	rhtml = /HTML$/i, | ||||||
| 	rinputs = /^(?:input|select|textarea|button)$/i, | 	rinputs = /^(?:input|select|textarea|button)$/i, | ||||||
| 	rheader = /^h\d$/i, | 	rheader = /^h\d$/i, | ||||||
| 
 | 
 | ||||||
| @ -676,9 +690,9 @@ var i, | |||||||
| 		setDocument(); | 		setDocument(); | ||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
| 	disabledAncestor = addCombinator( | 	inDisabledFieldset = addCombinator( | ||||||
| 		function( elem ) { | 		function( elem ) { | ||||||
| 			return elem.disabled === true && ("form" in elem || "label" in elem); | 			return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; | ||||||
| 		}, | 		}, | ||||||
| 		{ dir: "parentNode", next: "legend" } | 		{ dir: "parentNode", next: "legend" } | ||||||
| 	); | 	); | ||||||
| @ -791,18 +805,22 @@ function Sizzle( selector, context, results, seed ) { | |||||||
| 
 | 
 | ||||||
| 			// Take advantage of querySelectorAll
 | 			// Take advantage of querySelectorAll
 | ||||||
| 			if ( support.qsa && | 			if ( support.qsa && | ||||||
| 				!compilerCache[ selector + " " ] && | 				!nonnativeSelectorCache[ selector + " " ] && | ||||||
| 				(!rbuggyQSA || !rbuggyQSA.test( selector )) ) { | 				(!rbuggyQSA || !rbuggyQSA.test( selector )) && | ||||||
| 
 | 
 | ||||||
| 				if ( nodeType !== 1 ) { | 				// Support: IE 8 only
 | ||||||
| 					newContext = context; |  | ||||||
| 					newSelector = selector; |  | ||||||
| 
 |  | ||||||
| 				// qSA looks outside Element context, which is not what we want
 |  | ||||||
| 				// Thanks to Andrew Dupont for this workaround technique
 |  | ||||||
| 				// Support: IE <=8
 |  | ||||||
| 				// Exclude object elements
 | 				// Exclude object elements
 | ||||||
| 				} else if ( context.nodeName.toLowerCase() !== "object" ) { | 				(nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) { | ||||||
|  | 
 | ||||||
|  | 				newSelector = selector; | ||||||
|  | 				newContext = context; | ||||||
|  | 
 | ||||||
|  | 				// qSA considers elements outside a scoping root when evaluating child or
 | ||||||
|  | 				// descendant combinators, which is not what we want.
 | ||||||
|  | 				// In such cases, we work around the behavior by prefixing every selector in the
 | ||||||
|  | 				// list with an ID selector referencing the scope context.
 | ||||||
|  | 				// Thanks to Andrew Dupont for this technique.
 | ||||||
|  | 				if ( nodeType === 1 && rdescend.test( selector ) ) { | ||||||
| 
 | 
 | ||||||
| 					// Capture the context ID, setting it first if necessary
 | 					// Capture the context ID, setting it first if necessary
 | ||||||
| 					if ( (nid = context.getAttribute( "id" )) ) { | 					if ( (nid = context.getAttribute( "id" )) ) { | ||||||
| @ -824,17 +842,16 @@ function Sizzle( selector, context, results, seed ) { | |||||||
| 						context; | 						context; | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				if ( newSelector ) { | 				try { | ||||||
| 					try { | 					push.apply( results, | ||||||
| 						push.apply( results, | 						newContext.querySelectorAll( newSelector ) | ||||||
| 							newContext.querySelectorAll( newSelector ) | 					); | ||||||
| 						); | 					return results; | ||||||
| 						return results; | 				} catch ( qsaError ) { | ||||||
| 					} catch ( qsaError ) { | 					nonnativeSelectorCache( selector, true ); | ||||||
| 					} finally { | 				} finally { | ||||||
| 						if ( nid === expando ) { | 					if ( nid === expando ) { | ||||||
| 							context.removeAttribute( "id" ); | 						context.removeAttribute( "id" ); | ||||||
| 						} |  | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| @ -998,7 +1015,7 @@ function createDisabledPseudo( disabled ) { | |||||||
| 					// Where there is no isDisabled, check manually
 | 					// Where there is no isDisabled, check manually
 | ||||||
| 					/* jshint -W018 */ | 					/* jshint -W018 */ | ||||||
| 					elem.isDisabled !== !disabled && | 					elem.isDisabled !== !disabled && | ||||||
| 						disabledAncestor( elem ) === disabled; | 						inDisabledFieldset( elem ) === disabled; | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			return elem.disabled === disabled; | 			return elem.disabled === disabled; | ||||||
| @ -1055,10 +1072,13 @@ support = Sizzle.support = {}; | |||||||
|  * @returns {Boolean} True iff elem is a non-HTML XML node |  * @returns {Boolean} True iff elem is a non-HTML XML node | ||||||
|  */ |  */ | ||||||
| isXML = Sizzle.isXML = function( elem ) { | isXML = Sizzle.isXML = function( elem ) { | ||||||
| 	// documentElement is verified for cases where it doesn't yet exist
 | 	var namespace = elem.namespaceURI, | ||||||
| 	// (such as loading iframes in IE - #4833)
 | 		docElem = (elem.ownerDocument || elem).documentElement; | ||||||
| 	var documentElement = elem && (elem.ownerDocument || elem).documentElement; | 
 | ||||||
| 	return documentElement ? documentElement.nodeName !== "HTML" : false; | 	// Support: IE <=8
 | ||||||
|  | 	// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
 | ||||||
|  | 	// https://bugs.jquery.com/ticket/4833
 | ||||||
|  | 	return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
| @ -1480,11 +1500,8 @@ Sizzle.matchesSelector = function( elem, expr ) { | |||||||
| 		setDocument( elem ); | 		setDocument( elem ); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Make sure that attribute selectors are quoted
 |  | ||||||
| 	expr = expr.replace( rattributeQuotes, "='$1']" ); |  | ||||||
| 
 |  | ||||||
| 	if ( support.matchesSelector && documentIsHTML && | 	if ( support.matchesSelector && documentIsHTML && | ||||||
| 		!compilerCache[ expr + " " ] && | 		!nonnativeSelectorCache[ expr + " " ] && | ||||||
| 		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && | 		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && | ||||||
| 		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) { | 		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) { | ||||||
| 
 | 
 | ||||||
| @ -1498,7 +1515,9 @@ Sizzle.matchesSelector = function( elem, expr ) { | |||||||
| 					elem.document && elem.document.nodeType !== 11 ) { | 					elem.document && elem.document.nodeType !== 11 ) { | ||||||
| 				return ret; | 				return ret; | ||||||
| 			} | 			} | ||||||
| 		} catch (e) {} | 		} catch (e) { | ||||||
|  | 			nonnativeSelectorCache( expr, true ); | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return Sizzle( expr, document, null, [ elem ] ).length > 0; | 	return Sizzle( expr, document, null, [ elem ] ).length > 0; | ||||||
| @ -1957,7 +1976,7 @@ Expr = Sizzle.selectors = { | |||||||
| 		"contains": markFunction(function( text ) { | 		"contains": markFunction(function( text ) { | ||||||
| 			text = text.replace( runescape, funescape ); | 			text = text.replace( runescape, funescape ); | ||||||
| 			return function( elem ) { | 			return function( elem ) { | ||||||
| 				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; | 				return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; | ||||||
| 			}; | 			}; | ||||||
| 		}), | 		}), | ||||||
| 
 | 
 | ||||||
| @ -2096,7 +2115,11 @@ Expr = Sizzle.selectors = { | |||||||
| 		}), | 		}), | ||||||
| 
 | 
 | ||||||
| 		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) { | 		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) { | ||||||
| 			var i = argument < 0 ? argument + length : argument; | 			var i = argument < 0 ? | ||||||
|  | 				argument + length : | ||||||
|  | 				argument > length ? | ||||||
|  | 					length : | ||||||
|  | 					argument; | ||||||
| 			for ( ; --i >= 0; ) { | 			for ( ; --i >= 0; ) { | ||||||
| 				matchIndexes.push( i ); | 				matchIndexes.push( i ); | ||||||
| 			} | 			} | ||||||
| @ -3146,18 +3169,18 @@ jQuery.each( { | |||||||
| 		return siblings( elem.firstChild ); | 		return siblings( elem.firstChild ); | ||||||
| 	}, | 	}, | ||||||
| 	contents: function( elem ) { | 	contents: function( elem ) { | ||||||
|         if ( nodeName( elem, "iframe" ) ) { | 		if ( typeof elem.contentDocument !== "undefined" ) { | ||||||
|             return elem.contentDocument; | 			return elem.contentDocument; | ||||||
|         } | 		} | ||||||
| 
 | 
 | ||||||
|         // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
 | 		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
 | ||||||
|         // Treat the template element as a regular one in browsers that
 | 		// Treat the template element as a regular one in browsers that
 | ||||||
|         // don't support it.
 | 		// don't support it.
 | ||||||
|         if ( nodeName( elem, "template" ) ) { | 		if ( nodeName( elem, "template" ) ) { | ||||||
|             elem = elem.content || elem; | 			elem = elem.content || elem; | ||||||
|         } | 		} | ||||||
| 
 | 
 | ||||||
|         return jQuery.merge( [], elem.childNodes ); | 		return jQuery.merge( [], elem.childNodes ); | ||||||
| 	} | 	} | ||||||
| }, function( name, fn ) { | }, function( name, fn ) { | ||||||
| 	jQuery.fn[ name ] = function( until, selector ) { | 	jQuery.fn[ name ] = function( until, selector ) { | ||||||
| @ -4466,6 +4489,26 @@ var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); | |||||||
| 
 | 
 | ||||||
| var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; | var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; | ||||||
| 
 | 
 | ||||||
|  | var documentElement = document.documentElement; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	var isAttached = function( elem ) { | ||||||
|  | 			return jQuery.contains( elem.ownerDocument, elem ); | ||||||
|  | 		}, | ||||||
|  | 		composed = { composed: true }; | ||||||
|  | 
 | ||||||
|  | 	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
 | ||||||
|  | 	// Check attachment across shadow DOM boundaries when possible (gh-3504)
 | ||||||
|  | 	// Support: iOS 10.0-10.2 only
 | ||||||
|  | 	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
 | ||||||
|  | 	// leading to errors. We need to check for `getRootNode`.
 | ||||||
|  | 	if ( documentElement.getRootNode ) { | ||||||
|  | 		isAttached = function( elem ) { | ||||||
|  | 			return jQuery.contains( elem.ownerDocument, elem ) || | ||||||
|  | 				elem.getRootNode( composed ) === elem.ownerDocument; | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
| var isHiddenWithinTree = function( elem, el ) { | var isHiddenWithinTree = function( elem, el ) { | ||||||
| 
 | 
 | ||||||
| 		// isHiddenWithinTree might be called from jQuery#filter function;
 | 		// isHiddenWithinTree might be called from jQuery#filter function;
 | ||||||
| @ -4480,7 +4523,7 @@ var isHiddenWithinTree = function( elem, el ) { | |||||||
| 			// Support: Firefox <=43 - 45
 | 			// Support: Firefox <=43 - 45
 | ||||||
| 			// Disconnected elements can have computed display: none, so first confirm that elem is
 | 			// Disconnected elements can have computed display: none, so first confirm that elem is
 | ||||||
| 			// in the document.
 | 			// in the document.
 | ||||||
| 			jQuery.contains( elem.ownerDocument, elem ) && | 			isAttached( elem ) && | ||||||
| 
 | 
 | ||||||
| 			jQuery.css( elem, "display" ) === "none"; | 			jQuery.css( elem, "display" ) === "none"; | ||||||
| 	}; | 	}; | ||||||
| @ -4522,7 +4565,8 @@ function adjustCSS( elem, prop, valueParts, tween ) { | |||||||
| 		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), | 		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), | ||||||
| 
 | 
 | ||||||
| 		// Starting value computation is required for potential unit mismatches
 | 		// Starting value computation is required for potential unit mismatches
 | ||||||
| 		initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && | 		initialInUnit = elem.nodeType && | ||||||
|  | 			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && | ||||||
| 			rcssNum.exec( jQuery.css( elem, prop ) ); | 			rcssNum.exec( jQuery.css( elem, prop ) ); | ||||||
| 
 | 
 | ||||||
| 	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { | 	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { | ||||||
| @ -4669,7 +4713,7 @@ jQuery.fn.extend( { | |||||||
| } ); | } ); | ||||||
| var rcheckableType = ( /^(?:checkbox|radio)$/i ); | var rcheckableType = ( /^(?:checkbox|radio)$/i ); | ||||||
| 
 | 
 | ||||||
| var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); | var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); | ||||||
| 
 | 
 | ||||||
| var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); | var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); | ||||||
| 
 | 
 | ||||||
| @ -4741,7 +4785,7 @@ function setGlobalEval( elems, refElements ) { | |||||||
| var rhtml = /<|&#?\w+;/; | var rhtml = /<|&#?\w+;/; | ||||||
| 
 | 
 | ||||||
| function buildFragment( elems, context, scripts, selection, ignored ) { | function buildFragment( elems, context, scripts, selection, ignored ) { | ||||||
| 	var elem, tmp, tag, wrap, contains, j, | 	var elem, tmp, tag, wrap, attached, j, | ||||||
| 		fragment = context.createDocumentFragment(), | 		fragment = context.createDocumentFragment(), | ||||||
| 		nodes = [], | 		nodes = [], | ||||||
| 		i = 0, | 		i = 0, | ||||||
| @ -4805,13 +4849,13 @@ function buildFragment( elems, context, scripts, selection, ignored ) { | |||||||
| 			continue; | 			continue; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		contains = jQuery.contains( elem.ownerDocument, elem ); | 		attached = isAttached( elem ); | ||||||
| 
 | 
 | ||||||
| 		// Append to fragment
 | 		// Append to fragment
 | ||||||
| 		tmp = getAll( fragment.appendChild( elem ), "script" ); | 		tmp = getAll( fragment.appendChild( elem ), "script" ); | ||||||
| 
 | 
 | ||||||
| 		// Preserve script evaluation history
 | 		// Preserve script evaluation history
 | ||||||
| 		if ( contains ) { | 		if ( attached ) { | ||||||
| 			setGlobalEval( tmp ); | 			setGlobalEval( tmp ); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| @ -4854,8 +4898,6 @@ function buildFragment( elems, context, scripts, selection, ignored ) { | |||||||
| 	div.innerHTML = "<textarea>x</textarea>"; | 	div.innerHTML = "<textarea>x</textarea>"; | ||||||
| 	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; | 	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; | ||||||
| } )(); | } )(); | ||||||
| var documentElement = document.documentElement; |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| var | var | ||||||
| @ -4871,8 +4913,19 @@ function returnFalse() { | |||||||
| 	return false; | 	return false; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // Support: IE <=9 - 11+
 | ||||||
|  | // focus() and blur() are asynchronous, except when they are no-op.
 | ||||||
|  | // So expect focus to be synchronous when the element is already active,
 | ||||||
|  | // and blur to be synchronous when the element is not already active.
 | ||||||
|  | // (focus and blur are always synchronous in other supported browsers,
 | ||||||
|  | // this just defines when we can count on it).
 | ||||||
|  | function expectSync( elem, type ) { | ||||||
|  | 	return ( elem === safeActiveElement() ) === ( type === "focus" ); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // Support: IE <=9 only
 | // Support: IE <=9 only
 | ||||||
| // See #13393 for more info
 | // Accessing document.activeElement can throw unexpectedly
 | ||||||
|  | // https://bugs.jquery.com/ticket/13393
 | ||||||
| function safeActiveElement() { | function safeActiveElement() { | ||||||
| 	try { | 	try { | ||||||
| 		return document.activeElement; | 		return document.activeElement; | ||||||
| @ -5172,9 +5225,10 @@ jQuery.event = { | |||||||
| 			while ( ( handleObj = matched.handlers[ j++ ] ) && | 			while ( ( handleObj = matched.handlers[ j++ ] ) && | ||||||
| 				!event.isImmediatePropagationStopped() ) { | 				!event.isImmediatePropagationStopped() ) { | ||||||
| 
 | 
 | ||||||
| 				// Triggered event must either 1) have no namespace, or 2) have namespace(s)
 | 				// If the event is namespaced, then each handler is only invoked if it is
 | ||||||
| 				// a subset or equal to those in the bound event (both can have no namespace).
 | 				// specially universal or its namespaces are a superset of the event's.
 | ||||||
| 				if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { | 				if ( !event.rnamespace || handleObj.namespace === false || | ||||||
|  | 					event.rnamespace.test( handleObj.namespace ) ) { | ||||||
| 
 | 
 | ||||||
| 					event.handleObj = handleObj; | 					event.handleObj = handleObj; | ||||||
| 					event.data = handleObj.data; | 					event.data = handleObj.data; | ||||||
| @ -5298,39 +5352,51 @@ jQuery.event = { | |||||||
| 			// Prevent triggered image.load events from bubbling to window.load
 | 			// Prevent triggered image.load events from bubbling to window.load
 | ||||||
| 			noBubble: true | 			noBubble: true | ||||||
| 		}, | 		}, | ||||||
| 		focus: { |  | ||||||
| 
 |  | ||||||
| 			// Fire native event if possible so blur/focus sequence is correct
 |  | ||||||
| 			trigger: function() { |  | ||||||
| 				if ( this !== safeActiveElement() && this.focus ) { |  | ||||||
| 					this.focus(); |  | ||||||
| 					return false; |  | ||||||
| 				} |  | ||||||
| 			}, |  | ||||||
| 			delegateType: "focusin" |  | ||||||
| 		}, |  | ||||||
| 		blur: { |  | ||||||
| 			trigger: function() { |  | ||||||
| 				if ( this === safeActiveElement() && this.blur ) { |  | ||||||
| 					this.blur(); |  | ||||||
| 					return false; |  | ||||||
| 				} |  | ||||||
| 			}, |  | ||||||
| 			delegateType: "focusout" |  | ||||||
| 		}, |  | ||||||
| 		click: { | 		click: { | ||||||
| 
 | 
 | ||||||
| 			// For checkbox, fire native event so checked state will be right
 | 			// Utilize native event to ensure correct state for checkable inputs
 | ||||||
| 			trigger: function() { | 			setup: function( data ) { | ||||||
| 				if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { | 
 | ||||||
| 					this.click(); | 				// For mutual compressibility with _default, replace `this` access with a local var.
 | ||||||
| 					return false; | 				// `|| data` is dead code meant only to preserve the variable through minification.
 | ||||||
|  | 				var el = this || data; | ||||||
|  | 
 | ||||||
|  | 				// Claim the first handler
 | ||||||
|  | 				if ( rcheckableType.test( el.type ) && | ||||||
|  | 					el.click && nodeName( el, "input" ) ) { | ||||||
|  | 
 | ||||||
|  | 					// dataPriv.set( el, "click", ... )
 | ||||||
|  | 					leverageNative( el, "click", returnTrue ); | ||||||
| 				} | 				} | ||||||
|  | 
 | ||||||
|  | 				// Return false to allow normal processing in the caller
 | ||||||
|  | 				return false; | ||||||
|  | 			}, | ||||||
|  | 			trigger: function( data ) { | ||||||
|  | 
 | ||||||
|  | 				// For mutual compressibility with _default, replace `this` access with a local var.
 | ||||||
|  | 				// `|| data` is dead code meant only to preserve the variable through minification.
 | ||||||
|  | 				var el = this || data; | ||||||
|  | 
 | ||||||
|  | 				// Force setup before triggering a click
 | ||||||
|  | 				if ( rcheckableType.test( el.type ) && | ||||||
|  | 					el.click && nodeName( el, "input" ) ) { | ||||||
|  | 
 | ||||||
|  | 					leverageNative( el, "click" ); | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				// Return non-false to allow normal event-path propagation
 | ||||||
|  | 				return true; | ||||||
| 			}, | 			}, | ||||||
| 
 | 
 | ||||||
| 			// For cross-browser consistency, don't fire native .click() on links
 | 			// For cross-browser consistency, suppress native .click() on links
 | ||||||
|  | 			// Also prevent it if we're currently inside a leveraged native-event stack
 | ||||||
| 			_default: function( event ) { | 			_default: function( event ) { | ||||||
| 				return nodeName( event.target, "a" ); | 				var target = event.target; | ||||||
|  | 				return rcheckableType.test( target.type ) && | ||||||
|  | 					target.click && nodeName( target, "input" ) && | ||||||
|  | 					dataPriv.get( target, "click" ) || | ||||||
|  | 					nodeName( target, "a" ); | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
| 
 | 
 | ||||||
| @ -5347,6 +5413,93 @@ jQuery.event = { | |||||||
| 	} | 	} | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | // Ensure the presence of an event listener that handles manually-triggered
 | ||||||
|  | // synthetic events by interrupting progress until reinvoked in response to
 | ||||||
|  | // *native* events that it fires directly, ensuring that state changes have
 | ||||||
|  | // already occurred before other listeners are invoked.
 | ||||||
|  | function leverageNative( el, type, expectSync ) { | ||||||
|  | 
 | ||||||
|  | 	// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
 | ||||||
|  | 	if ( !expectSync ) { | ||||||
|  | 		if ( dataPriv.get( el, type ) === undefined ) { | ||||||
|  | 			jQuery.event.add( el, type, returnTrue ); | ||||||
|  | 		} | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Register the controller as a special universal handler for all event namespaces
 | ||||||
|  | 	dataPriv.set( el, type, false ); | ||||||
|  | 	jQuery.event.add( el, type, { | ||||||
|  | 		namespace: false, | ||||||
|  | 		handler: function( event ) { | ||||||
|  | 			var notAsync, result, | ||||||
|  | 				saved = dataPriv.get( this, type ); | ||||||
|  | 
 | ||||||
|  | 			if ( ( event.isTrigger & 1 ) && this[ type ] ) { | ||||||
|  | 
 | ||||||
|  | 				// Interrupt processing of the outer synthetic .trigger()ed event
 | ||||||
|  | 				// Saved data should be false in such cases, but might be a leftover capture object
 | ||||||
|  | 				// from an async native handler (gh-4350)
 | ||||||
|  | 				if ( !saved.length ) { | ||||||
|  | 
 | ||||||
|  | 					// Store arguments for use when handling the inner native event
 | ||||||
|  | 					// There will always be at least one argument (an event object), so this array
 | ||||||
|  | 					// will not be confused with a leftover capture object.
 | ||||||
|  | 					saved = slice.call( arguments ); | ||||||
|  | 					dataPriv.set( this, type, saved ); | ||||||
|  | 
 | ||||||
|  | 					// Trigger the native event and capture its result
 | ||||||
|  | 					// Support: IE <=9 - 11+
 | ||||||
|  | 					// focus() and blur() are asynchronous
 | ||||||
|  | 					notAsync = expectSync( this, type ); | ||||||
|  | 					this[ type ](); | ||||||
|  | 					result = dataPriv.get( this, type ); | ||||||
|  | 					if ( saved !== result || notAsync ) { | ||||||
|  | 						dataPriv.set( this, type, false ); | ||||||
|  | 					} else { | ||||||
|  | 						result = {}; | ||||||
|  | 					} | ||||||
|  | 					if ( saved !== result ) { | ||||||
|  | 
 | ||||||
|  | 						// Cancel the outer synthetic event
 | ||||||
|  | 						event.stopImmediatePropagation(); | ||||||
|  | 						event.preventDefault(); | ||||||
|  | 						return result.value; | ||||||
|  | 					} | ||||||
|  | 
 | ||||||
|  | 				// If this is an inner synthetic event for an event with a bubbling surrogate
 | ||||||
|  | 				// (focus or blur), assume that the surrogate already propagated from triggering the
 | ||||||
|  | 				// native event and prevent that from happening again here.
 | ||||||
|  | 				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
 | ||||||
|  | 				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
 | ||||||
|  | 				// less bad than duplication.
 | ||||||
|  | 				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { | ||||||
|  | 					event.stopPropagation(); | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 			// If this is a native event triggered above, everything is now in order
 | ||||||
|  | 			// Fire an inner synthetic event with the original arguments
 | ||||||
|  | 			} else if ( saved.length ) { | ||||||
|  | 
 | ||||||
|  | 				// ...and capture the result
 | ||||||
|  | 				dataPriv.set( this, type, { | ||||||
|  | 					value: jQuery.event.trigger( | ||||||
|  | 
 | ||||||
|  | 						// Support: IE <=9 - 11+
 | ||||||
|  | 						// Extend with the prototype to reset the above stopImmediatePropagation()
 | ||||||
|  | 						jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), | ||||||
|  | 						saved.slice( 1 ), | ||||||
|  | 						this | ||||||
|  | 					) | ||||||
|  | 				} ); | ||||||
|  | 
 | ||||||
|  | 				// Abort handling of the native event
 | ||||||
|  | 				event.stopImmediatePropagation(); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} ); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| jQuery.removeEvent = function( elem, type, handle ) { | jQuery.removeEvent = function( elem, type, handle ) { | ||||||
| 
 | 
 | ||||||
| 	// This "if" is needed for plain objects
 | 	// This "if" is needed for plain objects
 | ||||||
| @ -5459,6 +5612,7 @@ jQuery.each( { | |||||||
| 	shiftKey: true, | 	shiftKey: true, | ||||||
| 	view: true, | 	view: true, | ||||||
| 	"char": true, | 	"char": true, | ||||||
|  | 	code: true, | ||||||
| 	charCode: true, | 	charCode: true, | ||||||
| 	key: true, | 	key: true, | ||||||
| 	keyCode: true, | 	keyCode: true, | ||||||
| @ -5505,6 +5659,33 @@ jQuery.each( { | |||||||
| 	} | 	} | ||||||
| }, jQuery.event.addProp ); | }, jQuery.event.addProp ); | ||||||
| 
 | 
 | ||||||
|  | jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { | ||||||
|  | 	jQuery.event.special[ type ] = { | ||||||
|  | 
 | ||||||
|  | 		// Utilize native event if possible so blur/focus sequence is correct
 | ||||||
|  | 		setup: function() { | ||||||
|  | 
 | ||||||
|  | 			// Claim the first handler
 | ||||||
|  | 			// dataPriv.set( this, "focus", ... )
 | ||||||
|  | 			// dataPriv.set( this, "blur", ... )
 | ||||||
|  | 			leverageNative( this, type, expectSync ); | ||||||
|  | 
 | ||||||
|  | 			// Return false to allow normal processing in the caller
 | ||||||
|  | 			return false; | ||||||
|  | 		}, | ||||||
|  | 		trigger: function() { | ||||||
|  | 
 | ||||||
|  | 			// Force setup before trigger
 | ||||||
|  | 			leverageNative( this, type ); | ||||||
|  | 
 | ||||||
|  | 			// Return non-false to allow normal event-path propagation
 | ||||||
|  | 			return true; | ||||||
|  | 		}, | ||||||
|  | 
 | ||||||
|  | 		delegateType: delegateType | ||||||
|  | 	}; | ||||||
|  | } ); | ||||||
|  | 
 | ||||||
| // Create mouseenter/leave events using mouseover/out and event-time checks
 | // Create mouseenter/leave events using mouseover/out and event-time checks
 | ||||||
| // so that event delegation works in jQuery.
 | // so that event delegation works in jQuery.
 | ||||||
| // Do the same for pointerenter/pointerleave and pointerover/pointerout
 | // Do the same for pointerenter/pointerleave and pointerover/pointerout
 | ||||||
| @ -5755,11 +5936,13 @@ function domManip( collection, args, callback, ignored ) { | |||||||
| 						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) { | 						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) { | ||||||
| 
 | 
 | ||||||
| 							// Optional AJAX dependency, but won't run scripts if not present
 | 							// Optional AJAX dependency, but won't run scripts if not present
 | ||||||
| 							if ( jQuery._evalUrl ) { | 							if ( jQuery._evalUrl && !node.noModule ) { | ||||||
| 								jQuery._evalUrl( node.src ); | 								jQuery._evalUrl( node.src, { | ||||||
|  | 									nonce: node.nonce || node.getAttribute( "nonce" ) | ||||||
|  | 								} ); | ||||||
| 							} | 							} | ||||||
| 						} else { | 						} else { | ||||||
| 							DOMEval( node.textContent.replace( rcleanScript, "" ), doc, node ); | 							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); | ||||||
| 						} | 						} | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| @ -5781,7 +5964,7 @@ function remove( elem, selector, keepData ) { | |||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if ( node.parentNode ) { | 		if ( node.parentNode ) { | ||||||
| 			if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { | 			if ( keepData && isAttached( node ) ) { | ||||||
| 				setGlobalEval( getAll( node, "script" ) ); | 				setGlobalEval( getAll( node, "script" ) ); | ||||||
| 			} | 			} | ||||||
| 			node.parentNode.removeChild( node ); | 			node.parentNode.removeChild( node ); | ||||||
| @ -5799,7 +5982,7 @@ jQuery.extend( { | |||||||
| 	clone: function( elem, dataAndEvents, deepDataAndEvents ) { | 	clone: function( elem, dataAndEvents, deepDataAndEvents ) { | ||||||
| 		var i, l, srcElements, destElements, | 		var i, l, srcElements, destElements, | ||||||
| 			clone = elem.cloneNode( true ), | 			clone = elem.cloneNode( true ), | ||||||
| 			inPage = jQuery.contains( elem.ownerDocument, elem ); | 			inPage = isAttached( elem ); | ||||||
| 
 | 
 | ||||||
| 		// Fix IE cloning issues
 | 		// Fix IE cloning issues
 | ||||||
| 		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && | 		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && | ||||||
| @ -6095,8 +6278,10 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); | |||||||
| 
 | 
 | ||||||
| 		// Support: IE 9 only
 | 		// Support: IE 9 only
 | ||||||
| 		// Detect overflow:scroll screwiness (gh-3699)
 | 		// Detect overflow:scroll screwiness (gh-3699)
 | ||||||
|  | 		// Support: Chrome <=64
 | ||||||
|  | 		// Don't get tricked when zoom affects offsetWidth (gh-4029)
 | ||||||
| 		div.style.position = "absolute"; | 		div.style.position = "absolute"; | ||||||
| 		scrollboxSizeVal = div.offsetWidth === 36 || "absolute"; | 		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; | ||||||
| 
 | 
 | ||||||
| 		documentElement.removeChild( container ); | 		documentElement.removeChild( container ); | ||||||
| 
 | 
 | ||||||
| @ -6167,7 +6352,7 @@ function curCSS( elem, name, computed ) { | |||||||
| 	if ( computed ) { | 	if ( computed ) { | ||||||
| 		ret = computed.getPropertyValue( name ) || computed[ name ]; | 		ret = computed.getPropertyValue( name ) || computed[ name ]; | ||||||
| 
 | 
 | ||||||
| 		if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { | 		if ( ret === "" && !isAttached( elem ) ) { | ||||||
| 			ret = jQuery.style( elem, name ); | 			ret = jQuery.style( elem, name ); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| @ -6223,30 +6408,13 @@ function addGetHookIf( conditionFn, hookFn ) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| var | var cssPrefixes = [ "Webkit", "Moz", "ms" ], | ||||||
|  | 	emptyStyle = document.createElement( "div" ).style, | ||||||
|  | 	vendorProps = {}; | ||||||
| 
 | 
 | ||||||
| 	// Swappable if display is none or starts with table
 | // Return a vendor-prefixed property or undefined
 | ||||||
| 	// except "table", "table-cell", or "table-caption"
 |  | ||||||
| 	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
 |  | ||||||
| 	rdisplayswap = /^(none|table(?!-c[ea]).+)/, |  | ||||||
| 	rcustomProp = /^--/, |  | ||||||
| 	cssShow = { position: "absolute", visibility: "hidden", display: "block" }, |  | ||||||
| 	cssNormalTransform = { |  | ||||||
| 		letterSpacing: "0", |  | ||||||
| 		fontWeight: "400" |  | ||||||
| 	}, |  | ||||||
| 
 |  | ||||||
| 	cssPrefixes = [ "Webkit", "Moz", "ms" ], |  | ||||||
| 	emptyStyle = document.createElement( "div" ).style; |  | ||||||
| 
 |  | ||||||
| // Return a css property mapped to a potentially vendor prefixed property
 |  | ||||||
| function vendorPropName( name ) { | function vendorPropName( name ) { | ||||||
| 
 | 
 | ||||||
| 	// Shortcut for names that are not vendor prefixed
 |  | ||||||
| 	if ( name in emptyStyle ) { |  | ||||||
| 		return name; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// Check for vendor prefixed names
 | 	// Check for vendor prefixed names
 | ||||||
| 	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), | 	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), | ||||||
| 		i = cssPrefixes.length; | 		i = cssPrefixes.length; | ||||||
| @ -6259,16 +6427,33 @@ function vendorPropName( name ) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Return a property mapped along what jQuery.cssProps suggests or to
 | // Return a potentially-mapped jQuery.cssProps or vendor prefixed property
 | ||||||
| // a vendor prefixed property.
 |  | ||||||
| function finalPropName( name ) { | function finalPropName( name ) { | ||||||
| 	var ret = jQuery.cssProps[ name ]; | 	var final = jQuery.cssProps[ name ] || vendorProps[ name ]; | ||||||
| 	if ( !ret ) { | 
 | ||||||
| 		ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; | 	if ( final ) { | ||||||
|  | 		return final; | ||||||
| 	} | 	} | ||||||
| 	return ret; | 	if ( name in emptyStyle ) { | ||||||
|  | 		return name; | ||||||
|  | 	} | ||||||
|  | 	return vendorProps[ name ] = vendorPropName( name ) || name; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | var | ||||||
|  | 
 | ||||||
|  | 	// Swappable if display is none or starts with table
 | ||||||
|  | 	// except "table", "table-cell", or "table-caption"
 | ||||||
|  | 	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
 | ||||||
|  | 	rdisplayswap = /^(none|table(?!-c[ea]).+)/, | ||||||
|  | 	rcustomProp = /^--/, | ||||||
|  | 	cssShow = { position: "absolute", visibility: "hidden", display: "block" }, | ||||||
|  | 	cssNormalTransform = { | ||||||
|  | 		letterSpacing: "0", | ||||||
|  | 		fontWeight: "400" | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
| function setPositiveNumber( elem, value, subtract ) { | function setPositiveNumber( elem, value, subtract ) { | ||||||
| 
 | 
 | ||||||
| 	// Any relative (+/-) values have already been
 | 	// Any relative (+/-) values have already been
 | ||||||
| @ -6340,7 +6525,10 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed | |||||||
| 			delta - | 			delta - | ||||||
| 			extra - | 			extra - | ||||||
| 			0.5 | 			0.5 | ||||||
| 		) ); | 
 | ||||||
|  | 		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
 | ||||||
|  | 		// Use an explicit zero to avoid NaN (gh-3964)
 | ||||||
|  | 		) ) || 0; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return delta; | 	return delta; | ||||||
| @ -6350,9 +6538,16 @@ function getWidthOrHeight( elem, dimension, extra ) { | |||||||
| 
 | 
 | ||||||
| 	// Start with computed style
 | 	// Start with computed style
 | ||||||
| 	var styles = getStyles( elem ), | 	var styles = getStyles( elem ), | ||||||
|  | 
 | ||||||
|  | 		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
 | ||||||
|  | 		// Fake content-box until we know it's needed to know the true value.
 | ||||||
|  | 		boxSizingNeeded = !support.boxSizingReliable() || extra, | ||||||
|  | 		isBorderBox = boxSizingNeeded && | ||||||
|  | 			jQuery.css( elem, "boxSizing", false, styles ) === "border-box", | ||||||
|  | 		valueIsBorderBox = isBorderBox, | ||||||
|  | 
 | ||||||
| 		val = curCSS( elem, dimension, styles ), | 		val = curCSS( elem, dimension, styles ), | ||||||
| 		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", | 		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); | ||||||
| 		valueIsBorderBox = isBorderBox; |  | ||||||
| 
 | 
 | ||||||
| 	// Support: Firefox <=54
 | 	// Support: Firefox <=54
 | ||||||
| 	// Return a confounding non-pixel value or feign ignorance, as appropriate.
 | 	// Return a confounding non-pixel value or feign ignorance, as appropriate.
 | ||||||
| @ -6363,22 +6558,29 @@ function getWidthOrHeight( elem, dimension, extra ) { | |||||||
| 		val = "auto"; | 		val = "auto"; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Check for style in case a browser which returns unreliable values
 |  | ||||||
| 	// for getComputedStyle silently falls back to the reliable elem.style
 |  | ||||||
| 	valueIsBorderBox = valueIsBorderBox && |  | ||||||
| 		( support.boxSizingReliable() || val === elem.style[ dimension ] ); |  | ||||||
| 
 | 
 | ||||||
| 	// Fall back to offsetWidth/offsetHeight when value is "auto"
 | 	// Fall back to offsetWidth/offsetHeight when value is "auto"
 | ||||||
| 	// This happens for inline elements with no explicit setting (gh-3571)
 | 	// This happens for inline elements with no explicit setting (gh-3571)
 | ||||||
| 	// Support: Android <=4.1 - 4.3 only
 | 	// Support: Android <=4.1 - 4.3 only
 | ||||||
| 	// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
 | 	// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
 | ||||||
| 	if ( val === "auto" || | 	// Support: IE 9-11 only
 | ||||||
| 		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) { | 	// Also use offsetWidth/offsetHeight for when box sizing is unreliable
 | ||||||
|  | 	// We use getClientRects() to check for hidden/disconnected.
 | ||||||
|  | 	// In those cases, the computed value can be trusted to be border-box
 | ||||||
|  | 	if ( ( !support.boxSizingReliable() && isBorderBox || | ||||||
|  | 		val === "auto" || | ||||||
|  | 		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && | ||||||
|  | 		elem.getClientRects().length ) { | ||||||
| 
 | 
 | ||||||
| 		val = elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ]; | 		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; | ||||||
| 
 | 
 | ||||||
| 		// offsetWidth/offsetHeight provide border-box values
 | 		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
 | ||||||
| 		valueIsBorderBox = true; | 		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
 | ||||||
|  | 		// retrieved value as a content box dimension.
 | ||||||
|  | 		valueIsBorderBox = offsetProp in elem; | ||||||
|  | 		if ( valueIsBorderBox ) { | ||||||
|  | 			val = elem[ offsetProp ]; | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Normalize "" and auto
 | 	// Normalize "" and auto
 | ||||||
| @ -6424,6 +6626,13 @@ jQuery.extend( { | |||||||
| 		"flexGrow": true, | 		"flexGrow": true, | ||||||
| 		"flexShrink": true, | 		"flexShrink": true, | ||||||
| 		"fontWeight": true, | 		"fontWeight": true, | ||||||
|  | 		"gridArea": true, | ||||||
|  | 		"gridColumn": true, | ||||||
|  | 		"gridColumnEnd": true, | ||||||
|  | 		"gridColumnStart": true, | ||||||
|  | 		"gridRow": true, | ||||||
|  | 		"gridRowEnd": true, | ||||||
|  | 		"gridRowStart": true, | ||||||
| 		"lineHeight": true, | 		"lineHeight": true, | ||||||
| 		"opacity": true, | 		"opacity": true, | ||||||
| 		"order": true, | 		"order": true, | ||||||
| @ -6479,7 +6688,9 @@ jQuery.extend( { | |||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			// If a number was passed in, add the unit (except for certain CSS properties)
 | 			// If a number was passed in, add the unit (except for certain CSS properties)
 | ||||||
| 			if ( type === "number" ) { | 			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
 | ||||||
|  | 			// "px" to a few hardcoded values.
 | ||||||
|  | 			if ( type === "number" && !isCustomProp ) { | ||||||
| 				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); | 				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| @ -6579,18 +6790,29 @@ jQuery.each( [ "height", "width" ], function( i, dimension ) { | |||||||
| 		set: function( elem, value, extra ) { | 		set: function( elem, value, extra ) { | ||||||
| 			var matches, | 			var matches, | ||||||
| 				styles = getStyles( elem ), | 				styles = getStyles( elem ), | ||||||
| 				isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", | 
 | ||||||
| 				subtract = extra && boxModelAdjustment( | 				// Only read styles.position if the test has a chance to fail
 | ||||||
| 					elem, | 				// to avoid forcing a reflow.
 | ||||||
| 					dimension, | 				scrollboxSizeBuggy = !support.scrollboxSize() && | ||||||
| 					extra, | 					styles.position === "absolute", | ||||||
| 					isBorderBox, | 
 | ||||||
| 					styles | 				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
 | ||||||
| 				); | 				boxSizingNeeded = scrollboxSizeBuggy || extra, | ||||||
|  | 				isBorderBox = boxSizingNeeded && | ||||||
|  | 					jQuery.css( elem, "boxSizing", false, styles ) === "border-box", | ||||||
|  | 				subtract = extra ? | ||||||
|  | 					boxModelAdjustment( | ||||||
|  | 						elem, | ||||||
|  | 						dimension, | ||||||
|  | 						extra, | ||||||
|  | 						isBorderBox, | ||||||
|  | 						styles | ||||||
|  | 					) : | ||||||
|  | 					0; | ||||||
| 
 | 
 | ||||||
| 			// Account for unreliable border-box dimensions by comparing offset* to computed and
 | 			// Account for unreliable border-box dimensions by comparing offset* to computed and
 | ||||||
| 			// faking a content-box to get border and padding (gh-3699)
 | 			// faking a content-box to get border and padding (gh-3699)
 | ||||||
| 			if ( isBorderBox && support.scrollboxSize() === styles.position ) { | 			if ( isBorderBox && scrollboxSizeBuggy ) { | ||||||
| 				subtract -= Math.ceil( | 				subtract -= Math.ceil( | ||||||
| 					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - | 					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - | ||||||
| 					parseFloat( styles[ dimension ] ) - | 					parseFloat( styles[ dimension ] ) - | ||||||
| @ -6758,9 +6980,9 @@ Tween.propHooks = { | |||||||
| 			// Use .style if available and use plain properties where available.
 | 			// Use .style if available and use plain properties where available.
 | ||||||
| 			if ( jQuery.fx.step[ tween.prop ] ) { | 			if ( jQuery.fx.step[ tween.prop ] ) { | ||||||
| 				jQuery.fx.step[ tween.prop ]( tween ); | 				jQuery.fx.step[ tween.prop ]( tween ); | ||||||
| 			} else if ( tween.elem.nodeType === 1 && | 			} else if ( tween.elem.nodeType === 1 && ( | ||||||
| 				( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || | 					jQuery.cssHooks[ tween.prop ] || | ||||||
| 					jQuery.cssHooks[ tween.prop ] ) ) { | 					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { | ||||||
| 				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); | 				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); | ||||||
| 			} else { | 			} else { | ||||||
| 				tween.elem[ tween.prop ] = tween.now; | 				tween.elem[ tween.prop ] = tween.now; | ||||||
| @ -8467,6 +8689,10 @@ jQuery.param = function( a, traditional ) { | |||||||
| 				encodeURIComponent( value == null ? "" : value ); | 				encodeURIComponent( value == null ? "" : value ); | ||||||
| 		}; | 		}; | ||||||
| 
 | 
 | ||||||
|  | 	if ( a == null ) { | ||||||
|  | 		return ""; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	// If an array was passed in, assume that it is an array of form elements.
 | 	// If an array was passed in, assume that it is an array of form elements.
 | ||||||
| 	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { | 	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { | ||||||
| 
 | 
 | ||||||
| @ -8969,12 +9195,14 @@ jQuery.extend( { | |||||||
| 						if ( !responseHeaders ) { | 						if ( !responseHeaders ) { | ||||||
| 							responseHeaders = {}; | 							responseHeaders = {}; | ||||||
| 							while ( ( match = rheaders.exec( responseHeadersString ) ) ) { | 							while ( ( match = rheaders.exec( responseHeadersString ) ) ) { | ||||||
| 								responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; | 								responseHeaders[ match[ 1 ].toLowerCase() + " " ] = | ||||||
|  | 									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) | ||||||
|  | 										.concat( match[ 2 ] ); | ||||||
| 							} | 							} | ||||||
| 						} | 						} | ||||||
| 						match = responseHeaders[ key.toLowerCase() ]; | 						match = responseHeaders[ key.toLowerCase() + " " ]; | ||||||
| 					} | 					} | ||||||
| 					return match == null ? null : match; | 					return match == null ? null : match.join( ", " ); | ||||||
| 				}, | 				}, | ||||||
| 
 | 
 | ||||||
| 				// Raw string
 | 				// Raw string
 | ||||||
| @ -9363,7 +9591,7 @@ jQuery.each( [ "get", "post" ], function( i, method ) { | |||||||
| } ); | } ); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| jQuery._evalUrl = function( url ) { | jQuery._evalUrl = function( url, options ) { | ||||||
| 	return jQuery.ajax( { | 	return jQuery.ajax( { | ||||||
| 		url: url, | 		url: url, | ||||||
| 
 | 
 | ||||||
| @ -9373,7 +9601,16 @@ jQuery._evalUrl = function( url ) { | |||||||
| 		cache: true, | 		cache: true, | ||||||
| 		async: false, | 		async: false, | ||||||
| 		global: false, | 		global: false, | ||||||
| 		"throws": true | 
 | ||||||
|  | 		// Only evaluate the response if it is successful (gh-4126)
 | ||||||
|  | 		// dataFilter is not invoked for failure responses, so using it instead
 | ||||||
|  | 		// of the default converter is kludgy but it works.
 | ||||||
|  | 		converters: { | ||||||
|  | 			"text script": function() {} | ||||||
|  | 		}, | ||||||
|  | 		dataFilter: function( response ) { | ||||||
|  | 			jQuery.globalEval( response, options ); | ||||||
|  | 		} | ||||||
| 	} ); | 	} ); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -9656,24 +9893,21 @@ jQuery.ajaxPrefilter( "script", function( s ) { | |||||||
| // Bind script tag hack transport
 | // Bind script tag hack transport
 | ||||||
| jQuery.ajaxTransport( "script", function( s ) { | jQuery.ajaxTransport( "script", function( s ) { | ||||||
| 
 | 
 | ||||||
| 	// This transport only deals with cross domain requests
 | 	// This transport only deals with cross domain or forced-by-attrs requests
 | ||||||
| 	if ( s.crossDomain ) { | 	if ( s.crossDomain || s.scriptAttrs ) { | ||||||
| 		var script, callback; | 		var script, callback; | ||||||
| 		return { | 		return { | ||||||
| 			send: function( _, complete ) { | 			send: function( _, complete ) { | ||||||
| 				script = jQuery( "<script>" ).prop( { | 				script = jQuery( "<script>" ) | ||||||
| 					charset: s.scriptCharset, | 					.attr( s.scriptAttrs || {} ) | ||||||
| 					src: s.url | 					.prop( { charset: s.scriptCharset, src: s.url } ) | ||||||
| 				} ).on( | 					.on( "load error", callback = function( evt ) { | ||||||
| 					"load error", |  | ||||||
| 					callback = function( evt ) { |  | ||||||
| 						script.remove(); | 						script.remove(); | ||||||
| 						callback = null; | 						callback = null; | ||||||
| 						if ( evt ) { | 						if ( evt ) { | ||||||
| 							complete( evt.type === "error" ? 404 : 200, evt.type ); | 							complete( evt.type === "error" ? 404 : 200, evt.type ); | ||||||
| 						} | 						} | ||||||
| 					} | 					} ); | ||||||
| 				); |  | ||||||
| 
 | 
 | ||||||
| 				// Use native DOM manipulation to avoid our domManip AJAX trickery
 | 				// Use native DOM manipulation to avoid our domManip AJAX trickery
 | ||||||
| 				document.head.appendChild( script[ 0 ] ); | 				document.head.appendChild( script[ 0 ] ); | ||||||
|  | |||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										34
									
								
								src/csproj-files.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								src/csproj-files.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | |||||||
|  | COPY src/ApiGateways/ApiGw-Base/*.csproj /src/src/ApiGateways/ApiGw-Base/ | ||||||
|  | COPY src/ApiGateways/Mobile.Bff.Shopping/aggregator/*.csproj /src/src/ApiGateways/Mobile.Bff.Shopping/aggregator/ | ||||||
|  | COPY src/ApiGateways/Web.Bff.Shopping/aggregator/*.csproj /src/src/ApiGateways/Web.Bff.Shopping/aggregator/ | ||||||
|  | COPY src/BuildingBlocks/EventBus/CommandBus/*.csproj /src/src/BuildingBlocks/EventBus/CommandBus/ | ||||||
|  | COPY src/BuildingBlocks/EventBus/EventBus/*.csproj /src/src/BuildingBlocks/EventBus/EventBus/ | ||||||
|  | COPY src/BuildingBlocks/EventBus/EventBus.Tests/*.csproj /src/src/BuildingBlocks/EventBus/EventBus.Tests/ | ||||||
|  | COPY src/BuildingBlocks/EventBus/EventBusRabbitMQ/*.csproj /src/src/BuildingBlocks/EventBus/EventBusRabbitMQ/ | ||||||
|  | COPY src/BuildingBlocks/EventBus/EventBusServiceBus/*.csproj /src/src/BuildingBlocks/EventBus/EventBusServiceBus/ | ||||||
|  | COPY src/BuildingBlocks/EventBus/IntegrationEventLogEF/*.csproj /src/src/BuildingBlocks/EventBus/IntegrationEventLogEF/ | ||||||
|  | COPY src/BuildingBlocks/WebHostCustomization/WebHost.Customization/*.csproj /src/src/BuildingBlocks/WebHostCustomization/WebHost.Customization/ | ||||||
|  | COPY src/Services/Basket/Basket.API/*.csproj /src/src/Services/Basket/Basket.API/ | ||||||
|  | COPY src/Services/Basket/Basket.FunctionalTests/*.csproj /src/src/Services/Basket/Basket.FunctionalTests/ | ||||||
|  | COPY src/Services/Basket/Basket.UnitTests/*.csproj /src/src/Services/Basket/Basket.UnitTests/ | ||||||
|  | COPY src/Services/Catalog/Catalog.API/*.csproj /src/src/Services/Catalog/Catalog.API/ | ||||||
|  | COPY src/Services/Catalog/Catalog.FunctionalTests/*.csproj /src/src/Services/Catalog/Catalog.FunctionalTests/ | ||||||
|  | COPY src/Services/Catalog/Catalog.UnitTests/*.csproj /src/src/Services/Catalog/Catalog.UnitTests/ | ||||||
|  | COPY src/Services/Identity/Identity.API/*.csproj /src/src/Services/Identity/Identity.API/ | ||||||
|  | COPY src/Services/Location/Locations.API/*.csproj /src/src/Services/Location/Locations.API/ | ||||||
|  | COPY src/Services/Location/Locations.FunctionalTests/*.csproj /src/src/Services/Location/Locations.FunctionalTests/ | ||||||
|  | COPY src/Services/Marketing/Marketing.API/*.csproj /src/src/Services/Marketing/Marketing.API/ | ||||||
|  | COPY src/Services/Marketing/Marketing.FunctionalTests/*.csproj /src/src/Services/Marketing/Marketing.FunctionalTests/ | ||||||
|  | COPY src/Services/Ordering/Ordering.API/*.csproj /src/src/Services/Ordering/Ordering.API/ | ||||||
|  | COPY src/Services/Ordering/Ordering.BackgroundTasks/*.csproj /src/src/Services/Ordering/Ordering.BackgroundTasks/ | ||||||
|  | COPY src/Services/Ordering/Ordering.Domain/*.csproj /src/src/Services/Ordering/Ordering.Domain/ | ||||||
|  | COPY src/Services/Ordering/Ordering.FunctionalTests/*.csproj /src/src/Services/Ordering/Ordering.FunctionalTests/ | ||||||
|  | COPY src/Services/Ordering/Ordering.Infrastructure/*.csproj /src/src/Services/Ordering/Ordering.Infrastructure/ | ||||||
|  | COPY src/Services/Ordering/Ordering.SignalrHub/*.csproj /src/src/Services/Ordering/Ordering.SignalrHub/ | ||||||
|  | COPY src/Services/Ordering/Ordering.UnitTests/*.csproj /src/src/Services/Ordering/Ordering.UnitTests/ | ||||||
|  | COPY src/Services/Payment/Payment.API/*.csproj /src/src/Services/Payment/Payment.API/ | ||||||
|  | COPY src/Services/Webhooks/Webhooks.API/*.csproj /src/src/Services/Webhooks/Webhooks.API/ | ||||||
|  | COPY src/Web/WebhookClient/*.csproj /src/src/Web/WebhookClient/ | ||||||
|  | COPY src/Web/WebMVC/*.csproj /src/src/Web/WebMVC/ | ||||||
|  | COPY src/Web/WebSPA/*.csproj /src/src/Web/WebSPA/ | ||||||
|  | COPY src/Web/WebStatus/*.csproj /src/src/Web/WebStatus/ | ||||||
| @ -1,65 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <TestRun id="96da8a5c-5309-4e3a-a6ed-89303561a450" name="@cc795b0cf03c 2018-12-05 11:23:58" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"> |  | ||||||
|   <Times creation="2018-12-05T11:23:58.8840432+00:00" queuing="2018-12-05T11:23:58.8840443+00:00" start="2018-12-05T11:23:45.4010507+00:00" finish="2018-12-05T11:23:58.9725825+00:00" /> |  | ||||||
|   <TestSettings name="default" id="0df98659-1d05-46e8-a58f-e605f0367f36"> |  | ||||||
|     <Deployment runDeploymentRoot="_cc795b0cf03c_2018-12-05_11_23_58" /> |  | ||||||
|   </TestSettings> |  | ||||||
|   <Results> |  | ||||||
|     <UnitTestResult executionId="561851a9-f9d7-46a8-a72f-b15d9f881e98" testId="65eb92e5-3f81-c557-7b6a-e31bbb392a30" testName="UnitTest.Basket.Application.CartControllerTest.Add_to_cart_success" computerName="cc795b0cf03c" duration="00:00:00.0520000" startTime="2018-12-05T11:23:58.3708078+00:00" endTime="2018-12-05T11:23:58.3708084+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="561851a9-f9d7-46a8-a72f-b15d9f881e98" /> |  | ||||||
|     <UnitTestResult executionId="503e5b72-ad5e-47e3-ba7a-e6bdf65fb3c6" testId="f13c87f6-4345-41c1-0ceb-530a37f8c45c" testName="UnitTest.Basket.Application.BasketWebApiTest.Doing_Checkout_Without_Basket_Should_Return_Bad_Request" computerName="cc795b0cf03c" duration="00:00:00.0030000" startTime="2018-12-05T11:23:58.2981843+00:00" endTime="2018-12-05T11:23:58.2981850+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="503e5b72-ad5e-47e3-ba7a-e6bdf65fb3c6" /> |  | ||||||
|     <UnitTestResult executionId="c94bfac7-b0f7-4c85-88f5-9b6ea39aefc7" testId="1be065ec-8cda-95e2-fd64-2bec276720d6" testName="UnitTest.Basket.Application.BasketWebApiTest.Doing_Checkout_Wit_Basket_Should_Publish_UserCheckoutAccepted_Integration_Event" computerName="cc795b0cf03c" duration="00:00:00.1550000" startTime="2018-12-05T11:23:58.2980829+00:00" endTime="2018-12-05T11:23:58.2980839+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="c94bfac7-b0f7-4c85-88f5-9b6ea39aefc7" /> |  | ||||||
|     <UnitTestResult executionId="0786dbc3-3a84-4d94-ba06-10ef5b44fede" testId="cfb3e0df-fbb0-f11f-f586-af6d36973673" testName="UnitTest.Basket.Application.CartControllerTest.Post_cart_success" computerName="cc795b0cf03c" duration="00:00:00.0970000" startTime="2018-12-05T11:23:58.4478198+00:00" endTime="2018-12-05T11:23:58.4478226+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="0786dbc3-3a84-4d94-ba06-10ef5b44fede" /> |  | ||||||
|     <UnitTestResult executionId="53777076-ea09-481d-acbb-b8b1d85513a9" testId="f7add3c9-26d7-687c-a46e-1e880e36f193" testName="UnitTest.Basket.Application.BasketWebApiTest.Post_customer_basket_success" computerName="cc795b0cf03c" duration="00:00:00.0630000" startTime="2018-12-05T11:23:58.3707805+00:00" endTime="2018-12-05T11:23:58.3707839+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="53777076-ea09-481d-acbb-b8b1d85513a9" /> |  | ||||||
|     <UnitTestResult executionId="3b321d3b-b42d-4b4b-a1b2-510a96ada515" testId="33fde07d-fd90-8a31-ce7f-73d594f79232" testName="UnitTest.Basket.Application.CartControllerTest.Post_cart_checkout_success" computerName="cc795b0cf03c" duration="00:00:01.4900000" startTime="2018-12-05T11:23:58.2970206+00:00" endTime="2018-12-05T11:23:58.2970240+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="3b321d3b-b42d-4b4b-a1b2-510a96ada515" /> |  | ||||||
|     <UnitTestResult executionId="9de96a13-7c87-4519-9c24-19861f9036e3" testId="ace9ddb6-e897-b915-1e3c-4ae77eb2f0e6" testName="UnitTest.Basket.Application.BasketWebApiTest.Get_customer_basket_success" computerName="cc795b0cf03c" duration="00:00:01.2680000" startTime="2018-12-05T11:23:58.0931351+00:00" endTime="2018-12-05T11:23:58.0931394+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="9de96a13-7c87-4519-9c24-19861f9036e3" /> |  | ||||||
|   </Results> |  | ||||||
|   <TestDefinitions> |  | ||||||
|     <UnitTest name="UnitTest.Basket.Application.CartControllerTest.Post_cart_success" storage="/src/src/services/basket/basket.unittests/bin/debug/netcoreapp2.1/basket.unittests.dll" id="cfb3e0df-fbb0-f11f-f586-af6d36973673"> |  | ||||||
|       <Execution id="0786dbc3-3a84-4d94-ba06-10ef5b44fede" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Basket/Basket.UnitTests/bin/Debug/netcoreapp2.1/Basket.UnitTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Basket.UnitTests" name="UnitTest.Basket.Application.CartControllerTest.Post_cart_success" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="UnitTest.Basket.Application.CartControllerTest.Add_to_cart_success" storage="/src/src/services/basket/basket.unittests/bin/debug/netcoreapp2.1/basket.unittests.dll" id="65eb92e5-3f81-c557-7b6a-e31bbb392a30"> |  | ||||||
|       <Execution id="561851a9-f9d7-46a8-a72f-b15d9f881e98" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Basket/Basket.UnitTests/bin/Debug/netcoreapp2.1/Basket.UnitTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Basket.UnitTests" name="UnitTest.Basket.Application.CartControllerTest.Add_to_cart_success" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="UnitTest.Basket.Application.BasketWebApiTest.Get_customer_basket_success" storage="/src/src/services/basket/basket.unittests/bin/debug/netcoreapp2.1/basket.unittests.dll" id="ace9ddb6-e897-b915-1e3c-4ae77eb2f0e6"> |  | ||||||
|       <Execution id="9de96a13-7c87-4519-9c24-19861f9036e3" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Basket/Basket.UnitTests/bin/Debug/netcoreapp2.1/Basket.UnitTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Basket.UnitTests" name="UnitTest.Basket.Application.BasketWebApiTest.Get_customer_basket_success" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="UnitTest.Basket.Application.BasketWebApiTest.Doing_Checkout_Without_Basket_Should_Return_Bad_Request" storage="/src/src/services/basket/basket.unittests/bin/debug/netcoreapp2.1/basket.unittests.dll" id="f13c87f6-4345-41c1-0ceb-530a37f8c45c"> |  | ||||||
|       <Execution id="503e5b72-ad5e-47e3-ba7a-e6bdf65fb3c6" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Basket/Basket.UnitTests/bin/Debug/netcoreapp2.1/Basket.UnitTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Basket.UnitTests" name="UnitTest.Basket.Application.BasketWebApiTest.Doing_Checkout_Without_Basket_Should_Return_Bad_Request" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="UnitTest.Basket.Application.BasketWebApiTest.Doing_Checkout_Wit_Basket_Should_Publish_UserCheckoutAccepted_Integration_Event" storage="/src/src/services/basket/basket.unittests/bin/debug/netcoreapp2.1/basket.unittests.dll" id="1be065ec-8cda-95e2-fd64-2bec276720d6"> |  | ||||||
|       <Execution id="c94bfac7-b0f7-4c85-88f5-9b6ea39aefc7" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Basket/Basket.UnitTests/bin/Debug/netcoreapp2.1/Basket.UnitTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Basket.UnitTests" name="UnitTest.Basket.Application.BasketWebApiTest.Doing_Checkout_Wit_Basket_Should_Publish_UserCheckoutAccepted_Integration_Event" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="UnitTest.Basket.Application.BasketWebApiTest.Post_customer_basket_success" storage="/src/src/services/basket/basket.unittests/bin/debug/netcoreapp2.1/basket.unittests.dll" id="f7add3c9-26d7-687c-a46e-1e880e36f193"> |  | ||||||
|       <Execution id="53777076-ea09-481d-acbb-b8b1d85513a9" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Basket/Basket.UnitTests/bin/Debug/netcoreapp2.1/Basket.UnitTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Basket.UnitTests" name="UnitTest.Basket.Application.BasketWebApiTest.Post_customer_basket_success" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="UnitTest.Basket.Application.CartControllerTest.Post_cart_checkout_success" storage="/src/src/services/basket/basket.unittests/bin/debug/netcoreapp2.1/basket.unittests.dll" id="33fde07d-fd90-8a31-ce7f-73d594f79232"> |  | ||||||
|       <Execution id="3b321d3b-b42d-4b4b-a1b2-510a96ada515" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Basket/Basket.UnitTests/bin/Debug/netcoreapp2.1/Basket.UnitTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Basket.UnitTests" name="UnitTest.Basket.Application.CartControllerTest.Post_cart_checkout_success" /> |  | ||||||
|     </UnitTest> |  | ||||||
|   </TestDefinitions> |  | ||||||
|   <TestEntries> |  | ||||||
|     <TestEntry testId="65eb92e5-3f81-c557-7b6a-e31bbb392a30" executionId="561851a9-f9d7-46a8-a72f-b15d9f881e98" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="f13c87f6-4345-41c1-0ceb-530a37f8c45c" executionId="503e5b72-ad5e-47e3-ba7a-e6bdf65fb3c6" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="1be065ec-8cda-95e2-fd64-2bec276720d6" executionId="c94bfac7-b0f7-4c85-88f5-9b6ea39aefc7" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="cfb3e0df-fbb0-f11f-f586-af6d36973673" executionId="0786dbc3-3a84-4d94-ba06-10ef5b44fede" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="f7add3c9-26d7-687c-a46e-1e880e36f193" executionId="53777076-ea09-481d-acbb-b8b1d85513a9" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="33fde07d-fd90-8a31-ce7f-73d594f79232" executionId="3b321d3b-b42d-4b4b-a1b2-510a96ada515" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="ace9ddb6-e897-b915-1e3c-4ae77eb2f0e6" executionId="9de96a13-7c87-4519-9c24-19861f9036e3" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|   </TestEntries> |  | ||||||
|   <TestLists> |  | ||||||
|     <TestList name="Results Not in a List" id="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestList name="All Loaded Results" id="19431567-8539-422a-85d7-44ee4e166bda" /> |  | ||||||
|   </TestLists> |  | ||||||
|   <ResultSummary outcome="Completed"> |  | ||||||
|     <Counters total="7" executed="7" passed="7" failed="0" error="0" timeout="0" aborted="0" inconclusive="0" passedButRunAborted="0" notRunnable="0" notExecuted="0" disconnected="0" warning="0" completed="0" inProgress="0" pending="0" /> |  | ||||||
|     <Output> |  | ||||||
|       <StdOut>[xUnit.net 00:00:06.1434181]   Discovering: Basket.UnitTests[xUnit.net 00:00:06.4201662]   Discovered:  Basket.UnitTests[xUnit.net 00:00:06.4258049]   Starting:    Basket.UnitTests[xUnit.net 00:00:09.1721258]   Finished:    Basket.UnitTests</StdOut> |  | ||||||
|     </Output> |  | ||||||
|   </ResultSummary> |  | ||||||
| </TestRun> |  | ||||||
| @ -1,65 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <TestRun id="39a96562-8a46-4aea-b99e-1d90d37045ec" name="@1785163cba64 2018-12-05 11:23:50" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"> |  | ||||||
|   <Times creation="2018-12-05T11:23:50.8479571+00:00" queuing="2018-12-05T11:23:50.8479579+00:00" start="2018-12-05T11:23:36.2713555+00:00" finish="2018-12-05T11:23:51.5732318+00:00" /> |  | ||||||
|   <TestSettings name="default" id="65e5de94-5658-477a-b4c1-cce07b716d69"> |  | ||||||
|     <Deployment runDeploymentRoot="_1785163cba64_2018-12-05_11_23_50" /> |  | ||||||
|   </TestSettings> |  | ||||||
|   <Results> |  | ||||||
|     <UnitTestResult executionId="f5375449-ee76-4ccd-ab5d-01788538583a" testId="1be065ec-8cda-95e2-fd64-2bec276720d6" testName="UnitTest.Basket.Application.BasketWebApiTest.Doing_Checkout_Wit_Basket_Should_Publish_UserCheckoutAccepted_Integration_Event" computerName="1785163cba64" duration="00:00:00.1400000" startTime="2018-12-05T11:23:50.4881664+00:00" endTime="2018-12-05T11:23:50.4881673+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="f5375449-ee76-4ccd-ab5d-01788538583a" /> |  | ||||||
|     <UnitTestResult executionId="c3451c4c-90b7-465d-b638-8c5e57a8680e" testId="f13c87f6-4345-41c1-0ceb-530a37f8c45c" testName="UnitTest.Basket.Application.BasketWebApiTest.Doing_Checkout_Without_Basket_Should_Return_Bad_Request" computerName="1785163cba64" duration="00:00:00.0020000" startTime="2018-12-05T11:23:50.4882146+00:00" endTime="2018-12-05T11:23:50.4882152+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="c3451c4c-90b7-465d-b638-8c5e57a8680e" /> |  | ||||||
|     <UnitTestResult executionId="37eceb9f-3500-4c62-8033-85f7322b60c1" testId="33fde07d-fd90-8a31-ce7f-73d594f79232" testName="UnitTest.Basket.Application.CartControllerTest.Post_cart_checkout_success" computerName="1785163cba64" duration="00:00:01.6230000" startTime="2018-12-05T11:23:50.4875247+00:00" endTime="2018-12-05T11:23:50.4875264+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="37eceb9f-3500-4c62-8033-85f7322b60c1" /> |  | ||||||
|     <UnitTestResult executionId="61af83cc-1623-40ee-8546-6cd0d6ece3cd" testId="65eb92e5-3f81-c557-7b6a-e31bbb392a30" testName="UnitTest.Basket.Application.CartControllerTest.Add_to_cart_success" computerName="1785163cba64" duration="00:00:00.0950000" startTime="2018-12-05T11:23:50.5151450+00:00" endTime="2018-12-05T11:23:50.5151485+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="61af83cc-1623-40ee-8546-6cd0d6ece3cd" /> |  | ||||||
|     <UnitTestResult executionId="3b941fb3-30a2-4d14-98f8-30c04df4c032" testId="cfb3e0df-fbb0-f11f-f586-af6d36973673" testName="UnitTest.Basket.Application.CartControllerTest.Post_cart_success" computerName="1785163cba64" duration="00:00:00.4220000" startTime="2018-12-05T11:23:50.9378230+00:00" endTime="2018-12-05T11:23:50.9378277+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="3b941fb3-30a2-4d14-98f8-30c04df4c032" /> |  | ||||||
|     <UnitTestResult executionId="0149f0b7-82e4-4793-909c-7a7083f75e98" testId="f7add3c9-26d7-687c-a46e-1e880e36f193" testName="UnitTest.Basket.Application.BasketWebApiTest.Post_customer_basket_success" computerName="1785163cba64" duration="00:00:00.1400000" startTime="2018-12-05T11:23:50.7725055+00:00" endTime="2018-12-05T11:23:50.7725076+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="0149f0b7-82e4-4793-909c-7a7083f75e98" /> |  | ||||||
|     <UnitTestResult executionId="9e2c8945-5e2e-4082-a8fc-2ed57b21df87" testId="ace9ddb6-e897-b915-1e3c-4ae77eb2f0e6" testName="UnitTest.Basket.Application.BasketWebApiTest.Get_customer_basket_success" computerName="1785163cba64" duration="00:00:01.3570000" startTime="2018-12-05T11:23:50.3117877+00:00" endTime="2018-12-05T11:23:50.3117921+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="9e2c8945-5e2e-4082-a8fc-2ed57b21df87" /> |  | ||||||
|   </Results> |  | ||||||
|   <TestDefinitions> |  | ||||||
|     <UnitTest name="UnitTest.Basket.Application.CartControllerTest.Post_cart_success" storage="/src/src/services/basket/basket.unittests/bin/debug/netcoreapp2.1/basket.unittests.dll" id="cfb3e0df-fbb0-f11f-f586-af6d36973673"> |  | ||||||
|       <Execution id="3b941fb3-30a2-4d14-98f8-30c04df4c032" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Basket/Basket.UnitTests/bin/Debug/netcoreapp2.1/Basket.UnitTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Basket.UnitTests" name="UnitTest.Basket.Application.CartControllerTest.Post_cart_success" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="UnitTest.Basket.Application.CartControllerTest.Add_to_cart_success" storage="/src/src/services/basket/basket.unittests/bin/debug/netcoreapp2.1/basket.unittests.dll" id="65eb92e5-3f81-c557-7b6a-e31bbb392a30"> |  | ||||||
|       <Execution id="61af83cc-1623-40ee-8546-6cd0d6ece3cd" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Basket/Basket.UnitTests/bin/Debug/netcoreapp2.1/Basket.UnitTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Basket.UnitTests" name="UnitTest.Basket.Application.CartControllerTest.Add_to_cart_success" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="UnitTest.Basket.Application.BasketWebApiTest.Get_customer_basket_success" storage="/src/src/services/basket/basket.unittests/bin/debug/netcoreapp2.1/basket.unittests.dll" id="ace9ddb6-e897-b915-1e3c-4ae77eb2f0e6"> |  | ||||||
|       <Execution id="9e2c8945-5e2e-4082-a8fc-2ed57b21df87" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Basket/Basket.UnitTests/bin/Debug/netcoreapp2.1/Basket.UnitTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Basket.UnitTests" name="UnitTest.Basket.Application.BasketWebApiTest.Get_customer_basket_success" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="UnitTest.Basket.Application.BasketWebApiTest.Doing_Checkout_Without_Basket_Should_Return_Bad_Request" storage="/src/src/services/basket/basket.unittests/bin/debug/netcoreapp2.1/basket.unittests.dll" id="f13c87f6-4345-41c1-0ceb-530a37f8c45c"> |  | ||||||
|       <Execution id="c3451c4c-90b7-465d-b638-8c5e57a8680e" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Basket/Basket.UnitTests/bin/Debug/netcoreapp2.1/Basket.UnitTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Basket.UnitTests" name="UnitTest.Basket.Application.BasketWebApiTest.Doing_Checkout_Without_Basket_Should_Return_Bad_Request" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="UnitTest.Basket.Application.BasketWebApiTest.Doing_Checkout_Wit_Basket_Should_Publish_UserCheckoutAccepted_Integration_Event" storage="/src/src/services/basket/basket.unittests/bin/debug/netcoreapp2.1/basket.unittests.dll" id="1be065ec-8cda-95e2-fd64-2bec276720d6"> |  | ||||||
|       <Execution id="f5375449-ee76-4ccd-ab5d-01788538583a" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Basket/Basket.UnitTests/bin/Debug/netcoreapp2.1/Basket.UnitTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Basket.UnitTests" name="UnitTest.Basket.Application.BasketWebApiTest.Doing_Checkout_Wit_Basket_Should_Publish_UserCheckoutAccepted_Integration_Event" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="UnitTest.Basket.Application.BasketWebApiTest.Post_customer_basket_success" storage="/src/src/services/basket/basket.unittests/bin/debug/netcoreapp2.1/basket.unittests.dll" id="f7add3c9-26d7-687c-a46e-1e880e36f193"> |  | ||||||
|       <Execution id="0149f0b7-82e4-4793-909c-7a7083f75e98" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Basket/Basket.UnitTests/bin/Debug/netcoreapp2.1/Basket.UnitTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Basket.UnitTests" name="UnitTest.Basket.Application.BasketWebApiTest.Post_customer_basket_success" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="UnitTest.Basket.Application.CartControllerTest.Post_cart_checkout_success" storage="/src/src/services/basket/basket.unittests/bin/debug/netcoreapp2.1/basket.unittests.dll" id="33fde07d-fd90-8a31-ce7f-73d594f79232"> |  | ||||||
|       <Execution id="37eceb9f-3500-4c62-8033-85f7322b60c1" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Basket/Basket.UnitTests/bin/Debug/netcoreapp2.1/Basket.UnitTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Basket.UnitTests" name="UnitTest.Basket.Application.CartControllerTest.Post_cart_checkout_success" /> |  | ||||||
|     </UnitTest> |  | ||||||
|   </TestDefinitions> |  | ||||||
|   <TestEntries> |  | ||||||
|     <TestEntry testId="1be065ec-8cda-95e2-fd64-2bec276720d6" executionId="f5375449-ee76-4ccd-ab5d-01788538583a" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="f13c87f6-4345-41c1-0ceb-530a37f8c45c" executionId="c3451c4c-90b7-465d-b638-8c5e57a8680e" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="33fde07d-fd90-8a31-ce7f-73d594f79232" executionId="37eceb9f-3500-4c62-8033-85f7322b60c1" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="65eb92e5-3f81-c557-7b6a-e31bbb392a30" executionId="61af83cc-1623-40ee-8546-6cd0d6ece3cd" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="cfb3e0df-fbb0-f11f-f586-af6d36973673" executionId="3b941fb3-30a2-4d14-98f8-30c04df4c032" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="f7add3c9-26d7-687c-a46e-1e880e36f193" executionId="0149f0b7-82e4-4793-909c-7a7083f75e98" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="ace9ddb6-e897-b915-1e3c-4ae77eb2f0e6" executionId="9e2c8945-5e2e-4082-a8fc-2ed57b21df87" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|   </TestEntries> |  | ||||||
|   <TestLists> |  | ||||||
|     <TestList name="Results Not in a List" id="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestList name="All Loaded Results" id="19431567-8539-422a-85d7-44ee4e166bda" /> |  | ||||||
|   </TestLists> |  | ||||||
|   <ResultSummary outcome="Completed"> |  | ||||||
|     <Counters total="7" executed="7" passed="7" failed="0" error="0" timeout="0" aborted="0" inconclusive="0" passedButRunAborted="0" notRunnable="0" notExecuted="0" disconnected="0" warning="0" completed="0" inProgress="0" pending="0" /> |  | ||||||
|     <Output> |  | ||||||
|       <StdOut>[xUnit.net 00:00:06.7811016]   Discovering: Basket.UnitTests[xUnit.net 00:00:07.1809374]   Discovered:  Basket.UnitTests[xUnit.net 00:00:07.1870723]   Starting:    Basket.UnitTests[xUnit.net 00:00:10.4183620]   Finished:    Basket.UnitTests</StdOut> |  | ||||||
|     </Output> |  | ||||||
|   </ResultSummary> |  | ||||||
| </TestRun> |  | ||||||
| @ -1,89 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <TestRun id="e380625d-16e5-49cd-944f-9ec6dea3a534" name="@3773afd31eec 2018-12-05 11:24:03" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"> |  | ||||||
|   <Times creation="2018-12-05T11:24:03.2781261+00:00" queuing="2018-12-05T11:24:03.2781270+00:00" start="2018-12-05T11:23:32.0461930+00:00" finish="2018-12-05T11:24:11.2871593+00:00" /> |  | ||||||
|   <TestSettings name="default" id="f4f579f9-05a0-4097-a3f3-f9dfa1c5fc22"> |  | ||||||
|     <Deployment runDeploymentRoot="_3773afd31eec_2018-12-05_11_24_03" /> |  | ||||||
|   </TestSettings> |  | ||||||
|   <Results> |  | ||||||
|     <UnitTestResult executionId="7627e97a-ef37-4a9b-b3bf-831d462fd492" testId="5eb4d579-2cb5-5f78-2e18-16e03c3f7383" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_filtered_catalog_items_and_response_ok_status_code" computerName="3773afd31eec" duration="00:00:00.8630000" startTime="2018-12-05T11:24:07.1639284+00:00" endTime="2018-12-05T11:24:07.1639318+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="7627e97a-ef37-4a9b-b3bf-831d462fd492" /> |  | ||||||
|     <UnitTestResult executionId="0fee9d77-1650-4141-8ee6-d928accb140f" testId="2098f087-bc1f-3220-4cc1-67f39aa69a42" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_bad_request_status_code" computerName="3773afd31eec" duration="00:00:00.6480000" startTime="2018-12-05T11:24:08.3220470+00:00" endTime="2018-12-05T11:24:08.3220496+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="0fee9d77-1650-4141-8ee6-d928accb140f" /> |  | ||||||
|     <UnitTestResult executionId="3de0a499-cded-43da-a582-2c4cf5e16ca9" testId="95c21500-9ed5-4391-9d7f-aebfd9190a11" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_filtered_catalog_items_and_response_ok_status_code" computerName="3773afd31eec" duration="00:00:00.8980000" startTime="2018-12-05T11:24:06.2955434+00:00" endTime="2018-12-05T11:24:06.2955469+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="3de0a499-cded-43da-a582-2c4cf5e16ca9" /> |  | ||||||
|     <UnitTestResult executionId="267805fc-cddd-41f9-a16b-7188226aae18" testId="54a38b91-4242-ca21-909c-b632c74bc378" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_name_and_response_ok_status_code" computerName="3773afd31eec" duration="00:00:00.8000000" startTime="2018-12-05T11:24:10.3388056+00:00" endTime="2018-12-05T11:24:10.3388081+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="267805fc-cddd-41f9-a16b-7188226aae18" /> |  | ||||||
|     <UnitTestResult executionId="a65654f5-92c9-4819-96d1-8d20e6448c22" testId="8b3ccbdd-cacd-e530-8e30-2c496c5b54d7" testName="Catalog.FunctionalTests.CatalogScenarios.Get_catalog_brands_response_ok_status_code" computerName="3773afd31eec" duration="00:00:00.4300000" startTime="2018-12-05T11:24:10.7713399+00:00" endTime="2018-12-05T11:24:10.7713434+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="a65654f5-92c9-4819-96d1-8d20e6448c22" /> |  | ||||||
|     <UnitTestResult executionId="7ba54f92-cc72-4be8-85d1-8b04a12b7c57" testId="0606c0fc-b6b0-1185-6890-3ad909738a66" testName="Catalog.FunctionalTests.CatalogScenarios.Get_catalog_types_response_ok_status_code" computerName="3773afd31eec" duration="00:00:00.5540000" startTime="2018-12-05T11:24:09.5410174+00:00" endTime="2018-12-05T11:24:09.5410203+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="7ba54f92-cc72-4be8-85d1-8b04a12b7c57" /> |  | ||||||
|     <UnitTestResult executionId="127defdc-eead-4b18-98e8-bb4a80f6d9a5" testId="78871366-7f13-cf9e-a618-4298c2fb3e63" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_ok_status_code" computerName="3773afd31eec" duration="00:00:19.2330000" startTime="2018-12-05T11:24:03.0044366+00:00" endTime="2018-12-05T11:24:03.0044408+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="127defdc-eead-4b18-98e8-bb4a80f6d9a5" /> |  | ||||||
|     <UnitTestResult executionId="1ed13bda-347c-40c8-b22d-bf148423331a" testId="5ddae08d-62ee-6680-a77c-640b5af2e809" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_catalog_items_and_response_ok_status_code" computerName="3773afd31eec" duration="00:00:00.6640000" startTime="2018-12-05T11:24:08.9852118+00:00" endTime="2018-12-05T11:24:08.9852149+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="1ed13bda-347c-40c8-b22d-bf148423331a" /> |  | ||||||
|     <UnitTestResult executionId="44e01d30-5f3a-42de-8671-1b0e542043de" testId="73afd2bb-85ac-239d-a889-a35ecbb96b02" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_not_found_status_code" computerName="3773afd31eec" duration="00:00:00.7330000" startTime="2018-12-05T11:24:05.4140150+00:00" endTime="2018-12-05T11:24:05.4140190+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="44e01d30-5f3a-42de-8671-1b0e542043de" /> |  | ||||||
|     <UnitTestResult executionId="c24ac03b-44a6-44eb-8e62-e77254199297" testId="1b373321-94b2-88eb-53a2-36d186286a1f" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_all_catalogitems_and_response_ok_status_code" computerName="3773afd31eec" duration="00:00:00.5140000" startTime="2018-12-05T11:24:07.6804365+00:00" endTime="2018-12-05T11:24:07.6804402+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="c24ac03b-44a6-44eb-8e62-e77254199297" /> |  | ||||||
|     <UnitTestResult executionId="188a98f4-e551-46b5-8954-81ec68261133" testId="c61af54f-3a98-9867-2720-4af9bf810653" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_catalogitem_by_name_and_response_ok_status_code" computerName="3773afd31eec" duration="00:00:01.5720000" startTime="2018-12-05T11:24:04.6656166+00:00" endTime="2018-12-05T11:24:04.6656202+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="188a98f4-e551-46b5-8954-81ec68261133" /> |  | ||||||
|   </Results> |  | ||||||
|   <TestDefinitions> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_bad_request_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="2098f087-bc1f-3220-4cc1-67f39aa69a42"> |  | ||||||
|       <Execution id="0fee9d77-1650-4141-8ee6-d928accb140f" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_bad_request_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_all_catalogitems_and_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="1b373321-94b2-88eb-53a2-36d186286a1f"> |  | ||||||
|       <Execution id="c24ac03b-44a6-44eb-8e62-e77254199297" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_all_catalogitems_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="78871366-7f13-cf9e-a618-4298c2fb3e63"> |  | ||||||
|       <Execution id="127defdc-eead-4b18-98e8-bb4a80f6d9a5" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_name_and_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="54a38b91-4242-ca21-909c-b632c74bc378"> |  | ||||||
|       <Execution id="267805fc-cddd-41f9-a16b-7188226aae18" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_name_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_catalog_items_and_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="5ddae08d-62ee-6680-a77c-640b5af2e809"> |  | ||||||
|       <Execution id="1ed13bda-347c-40c8-b22d-bf148423331a" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_catalog_items_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_catalog_brands_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="8b3ccbdd-cacd-e530-8e30-2c496c5b54d7"> |  | ||||||
|       <Execution id="a65654f5-92c9-4819-96d1-8d20e6448c22" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_catalog_brands_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_not_found_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="73afd2bb-85ac-239d-a889-a35ecbb96b02"> |  | ||||||
|       <Execution id="44e01d30-5f3a-42de-8671-1b0e542043de" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_not_found_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_filtered_catalog_items_and_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="95c21500-9ed5-4391-9d7f-aebfd9190a11"> |  | ||||||
|       <Execution id="3de0a499-cded-43da-a582-2c4cf5e16ca9" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_filtered_catalog_items_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_catalog_types_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="0606c0fc-b6b0-1185-6890-3ad909738a66"> |  | ||||||
|       <Execution id="7ba54f92-cc72-4be8-85d1-8b04a12b7c57" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_catalog_types_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_filtered_catalog_items_and_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="5eb4d579-2cb5-5f78-2e18-16e03c3f7383"> |  | ||||||
|       <Execution id="7627e97a-ef37-4a9b-b3bf-831d462fd492" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_filtered_catalog_items_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_catalogitem_by_name_and_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="c61af54f-3a98-9867-2720-4af9bf810653"> |  | ||||||
|       <Execution id="188a98f4-e551-46b5-8954-81ec68261133" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_catalogitem_by_name_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|   </TestDefinitions> |  | ||||||
|   <TestEntries> |  | ||||||
|     <TestEntry testId="5eb4d579-2cb5-5f78-2e18-16e03c3f7383" executionId="7627e97a-ef37-4a9b-b3bf-831d462fd492" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="2098f087-bc1f-3220-4cc1-67f39aa69a42" executionId="0fee9d77-1650-4141-8ee6-d928accb140f" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="95c21500-9ed5-4391-9d7f-aebfd9190a11" executionId="3de0a499-cded-43da-a582-2c4cf5e16ca9" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="54a38b91-4242-ca21-909c-b632c74bc378" executionId="267805fc-cddd-41f9-a16b-7188226aae18" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="8b3ccbdd-cacd-e530-8e30-2c496c5b54d7" executionId="a65654f5-92c9-4819-96d1-8d20e6448c22" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="0606c0fc-b6b0-1185-6890-3ad909738a66" executionId="7ba54f92-cc72-4be8-85d1-8b04a12b7c57" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="78871366-7f13-cf9e-a618-4298c2fb3e63" executionId="127defdc-eead-4b18-98e8-bb4a80f6d9a5" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="5ddae08d-62ee-6680-a77c-640b5af2e809" executionId="1ed13bda-347c-40c8-b22d-bf148423331a" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="73afd2bb-85ac-239d-a889-a35ecbb96b02" executionId="44e01d30-5f3a-42de-8671-1b0e542043de" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="1b373321-94b2-88eb-53a2-36d186286a1f" executionId="c24ac03b-44a6-44eb-8e62-e77254199297" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="c61af54f-3a98-9867-2720-4af9bf810653" executionId="188a98f4-e551-46b5-8954-81ec68261133" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|   </TestEntries> |  | ||||||
|   <TestLists> |  | ||||||
|     <TestList name="Results Not in a List" id="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestList name="All Loaded Results" id="19431567-8539-422a-85d7-44ee4e166bda" /> |  | ||||||
|   </TestLists> |  | ||||||
|   <ResultSummary outcome="Completed"> |  | ||||||
|     <Counters total="11" executed="11" passed="11" failed="0" error="0" timeout="0" aborted="0" inconclusive="0" passedButRunAborted="0" notRunnable="0" notExecuted="0" disconnected="0" warning="0" completed="0" inProgress="0" pending="0" /> |  | ||||||
|     <Output> |  | ||||||
|       <StdOut>[xUnit.net 00:00:06.0723374]   Discovering: Catalog.FunctionalTests[xUnit.net 00:00:06.4361995]   Discovered:  Catalog.FunctionalTests[xUnit.net 00:00:06.4447894]   Starting:    Catalog.FunctionalTests[xUnit.net 00:00:34.5834045]   Finished:    Catalog.FunctionalTests</StdOut> |  | ||||||
|     </Output> |  | ||||||
|   </ResultSummary> |  | ||||||
| </TestRun> |  | ||||||
| @ -1,89 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <TestRun id="aca6211e-f6da-4bba-bf41-a276c78d1443" name="@3a7e7ef6aa8e 2018-12-05 11:24:02" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"> |  | ||||||
|   <Times creation="2018-12-05T11:24:02.5864478+00:00" queuing="2018-12-05T11:24:02.5864485+00:00" start="2018-12-05T11:23:32.1458050+00:00" finish="2018-12-05T11:24:11.1044674+00:00" /> |  | ||||||
|   <TestSettings name="default" id="6b291d29-0315-494b-9db2-50bee5d38134"> |  | ||||||
|     <Deployment runDeploymentRoot="_3a7e7ef6aa8e_2018-12-05_11_24_02" /> |  | ||||||
|   </TestSettings> |  | ||||||
|   <Results> |  | ||||||
|     <UnitTestResult executionId="ed3644e1-b21b-46aa-a9d4-bddc3fd92c0d" testId="5eb4d579-2cb5-5f78-2e18-16e03c3f7383" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_filtered_catalog_items_and_response_ok_status_code" computerName="3a7e7ef6aa8e" duration="00:00:00.6620000" startTime="2018-12-05T11:24:06.3308316+00:00" endTime="2018-12-05T11:24:06.3308351+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="ed3644e1-b21b-46aa-a9d4-bddc3fd92c0d" /> |  | ||||||
|     <UnitTestResult executionId="eb67cab7-a711-48d1-9697-eff25b27e037" testId="c61af54f-3a98-9867-2720-4af9bf810653" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_catalogitem_by_name_and_response_ok_status_code" computerName="3a7e7ef6aa8e" duration="00:00:01.5160000" startTime="2018-12-05T11:24:03.8893359+00:00" endTime="2018-12-05T11:24:03.8893387+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="eb67cab7-a711-48d1-9697-eff25b27e037" /> |  | ||||||
|     <UnitTestResult executionId="d2b2bc96-e96b-44fe-b852-16a137d3f630" testId="5ddae08d-62ee-6680-a77c-640b5af2e809" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_catalog_items_and_response_ok_status_code" computerName="3a7e7ef6aa8e" duration="00:00:00.6630000" startTime="2018-12-05T11:24:08.3377755+00:00" endTime="2018-12-05T11:24:08.3377790+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="d2b2bc96-e96b-44fe-b852-16a137d3f630" /> |  | ||||||
|     <UnitTestResult executionId="4ac1e35c-b3b9-4882-b67b-ef08b65bc29b" testId="95c21500-9ed5-4391-9d7f-aebfd9190a11" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_filtered_catalog_items_and_response_ok_status_code" computerName="3a7e7ef6aa8e" duration="00:00:01.0900000" startTime="2018-12-05T11:24:05.6700321+00:00" endTime="2018-12-05T11:24:05.6700348+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="4ac1e35c-b3b9-4882-b67b-ef08b65bc29b" /> |  | ||||||
|     <UnitTestResult executionId="7d7a7d65-6854-4466-a37d-15347956f783" testId="2098f087-bc1f-3220-4cc1-67f39aa69a42" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_bad_request_status_code" computerName="3a7e7ef6aa8e" duration="00:00:00.3800000" startTime="2018-12-05T11:24:07.6681963+00:00" endTime="2018-12-05T11:24:07.6681996+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="7d7a7d65-6854-4466-a37d-15347956f783" /> |  | ||||||
|     <UnitTestResult executionId="fa563e70-2fc9-44b8-b818-85c371e50bc2" testId="54a38b91-4242-ca21-909c-b632c74bc378" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_name_and_response_ok_status_code" computerName="3a7e7ef6aa8e" duration="00:00:00.7230000" startTime="2018-12-05T11:24:09.8641893+00:00" endTime="2018-12-05T11:24:09.8641921+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="fa563e70-2fc9-44b8-b818-85c371e50bc2" /> |  | ||||||
|     <UnitTestResult executionId="b06b8d43-2696-4904-bc38-3feb3363ff3d" testId="0606c0fc-b6b0-1185-6890-3ad909738a66" testName="Catalog.FunctionalTests.CatalogScenarios.Get_catalog_types_response_ok_status_code" computerName="3a7e7ef6aa8e" duration="00:00:00.8070000" startTime="2018-12-05T11:24:09.1399724+00:00" endTime="2018-12-05T11:24:09.1399751+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="b06b8d43-2696-4904-bc38-3feb3363ff3d" /> |  | ||||||
|     <UnitTestResult executionId="93160bfd-9e96-4e09-bd7f-5487be6d0b35" testId="1b373321-94b2-88eb-53a2-36d186286a1f" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_all_catalogitems_and_response_ok_status_code" computerName="3a7e7ef6aa8e" duration="00:00:00.9560000" startTime="2018-12-05T11:24:07.2880184+00:00" endTime="2018-12-05T11:24:07.2880216+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="93160bfd-9e96-4e09-bd7f-5487be6d0b35" /> |  | ||||||
|     <UnitTestResult executionId="5ecb8d84-de7b-483c-b965-eb7d887e41b1" testId="73afd2bb-85ac-239d-a889-a35ecbb96b02" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_not_found_status_code" computerName="3a7e7ef6aa8e" duration="00:00:00.6590000" startTime="2018-12-05T11:24:04.5775407+00:00" endTime="2018-12-05T11:24:04.5775450+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="5ecb8d84-de7b-483c-b965-eb7d887e41b1" /> |  | ||||||
|     <UnitTestResult executionId="a8110557-5a9f-448a-aae5-55a27cbda816" testId="78871366-7f13-cf9e-a618-4298c2fb3e63" testName="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_ok_status_code" computerName="3a7e7ef6aa8e" duration="00:00:18.3120000" startTime="2018-12-05T11:24:02.3211973+00:00" endTime="2018-12-05T11:24:02.3212009+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="a8110557-5a9f-448a-aae5-55a27cbda816" /> |  | ||||||
|     <UnitTestResult executionId="d33a437b-4f8a-48f3-94a1-e8faae50e3dc" testId="8b3ccbdd-cacd-e530-8e30-2c496c5b54d7" testName="Catalog.FunctionalTests.CatalogScenarios.Get_catalog_brands_response_ok_status_code" computerName="3a7e7ef6aa8e" duration="00:00:00.7120000" startTime="2018-12-05T11:24:10.5742881+00:00" endTime="2018-12-05T11:24:10.5742915+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="d33a437b-4f8a-48f3-94a1-e8faae50e3dc" /> |  | ||||||
|   </Results> |  | ||||||
|   <TestDefinitions> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_bad_request_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="2098f087-bc1f-3220-4cc1-67f39aa69a42"> |  | ||||||
|       <Execution id="7d7a7d65-6854-4466-a37d-15347956f783" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_bad_request_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_all_catalogitems_and_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="1b373321-94b2-88eb-53a2-36d186286a1f"> |  | ||||||
|       <Execution id="93160bfd-9e96-4e09-bd7f-5487be6d0b35" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_all_catalogitems_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="78871366-7f13-cf9e-a618-4298c2fb3e63"> |  | ||||||
|       <Execution id="a8110557-5a9f-448a-aae5-55a27cbda816" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_name_and_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="54a38b91-4242-ca21-909c-b632c74bc378"> |  | ||||||
|       <Execution id="fa563e70-2fc9-44b8-b818-85c371e50bc2" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_name_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_catalog_items_and_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="5ddae08d-62ee-6680-a77c-640b5af2e809"> |  | ||||||
|       <Execution id="d2b2bc96-e96b-44fe-b852-16a137d3f630" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_catalog_items_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_catalog_brands_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="8b3ccbdd-cacd-e530-8e30-2c496c5b54d7"> |  | ||||||
|       <Execution id="d33a437b-4f8a-48f3-94a1-e8faae50e3dc" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_catalog_brands_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_not_found_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="73afd2bb-85ac-239d-a889-a35ecbb96b02"> |  | ||||||
|       <Execution id="5ecb8d84-de7b-483c-b965-eb7d887e41b1" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_catalogitem_by_id_and_response_not_found_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_filtered_catalog_items_and_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="95c21500-9ed5-4391-9d7f-aebfd9190a11"> |  | ||||||
|       <Execution id="4ac1e35c-b3b9-4882-b67b-ef08b65bc29b" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_filtered_catalog_items_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_catalog_types_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="0606c0fc-b6b0-1185-6890-3ad909738a66"> |  | ||||||
|       <Execution id="b06b8d43-2696-4904-bc38-3feb3363ff3d" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_catalog_types_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_filtered_catalog_items_and_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="5eb4d579-2cb5-5f78-2e18-16e03c3f7383"> |  | ||||||
|       <Execution id="ed3644e1-b21b-46aa-a9d4-bddc3fd92c0d" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_filtered_catalog_items_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_catalogitem_by_name_and_response_ok_status_code" storage="/src/src/services/catalog/catalog.functionaltests/bin/debug/netcoreapp2.1/catalog.functionaltests.dll" id="c61af54f-3a98-9867-2720-4af9bf810653"> |  | ||||||
|       <Execution id="eb67cab7-a711-48d1-9697-eff25b27e037" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Catalog/Catalog.FunctionalTests/bin/Debug/netcoreapp2.1/Catalog.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Catalog.FunctionalTests" name="Catalog.FunctionalTests.CatalogScenarios.Get_get_paginated_catalogitem_by_name_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|   </TestDefinitions> |  | ||||||
|   <TestEntries> |  | ||||||
|     <TestEntry testId="5eb4d579-2cb5-5f78-2e18-16e03c3f7383" executionId="ed3644e1-b21b-46aa-a9d4-bddc3fd92c0d" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="c61af54f-3a98-9867-2720-4af9bf810653" executionId="eb67cab7-a711-48d1-9697-eff25b27e037" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="5ddae08d-62ee-6680-a77c-640b5af2e809" executionId="d2b2bc96-e96b-44fe-b852-16a137d3f630" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="95c21500-9ed5-4391-9d7f-aebfd9190a11" executionId="4ac1e35c-b3b9-4882-b67b-ef08b65bc29b" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="2098f087-bc1f-3220-4cc1-67f39aa69a42" executionId="7d7a7d65-6854-4466-a37d-15347956f783" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="54a38b91-4242-ca21-909c-b632c74bc378" executionId="fa563e70-2fc9-44b8-b818-85c371e50bc2" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="0606c0fc-b6b0-1185-6890-3ad909738a66" executionId="b06b8d43-2696-4904-bc38-3feb3363ff3d" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="1b373321-94b2-88eb-53a2-36d186286a1f" executionId="93160bfd-9e96-4e09-bd7f-5487be6d0b35" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="73afd2bb-85ac-239d-a889-a35ecbb96b02" executionId="5ecb8d84-de7b-483c-b965-eb7d887e41b1" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="78871366-7f13-cf9e-a618-4298c2fb3e63" executionId="a8110557-5a9f-448a-aae5-55a27cbda816" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="8b3ccbdd-cacd-e530-8e30-2c496c5b54d7" executionId="d33a437b-4f8a-48f3-94a1-e8faae50e3dc" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|   </TestEntries> |  | ||||||
|   <TestLists> |  | ||||||
|     <TestList name="Results Not in a List" id="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestList name="All Loaded Results" id="19431567-8539-422a-85d7-44ee4e166bda" /> |  | ||||||
|   </TestLists> |  | ||||||
|   <ResultSummary outcome="Completed"> |  | ||||||
|     <Counters total="11" executed="11" passed="11" failed="0" error="0" timeout="0" aborted="0" inconclusive="0" passedButRunAborted="0" notRunnable="0" notExecuted="0" disconnected="0" warning="0" completed="0" inProgress="0" pending="0" /> |  | ||||||
|     <Output> |  | ||||||
|       <StdOut>[xUnit.net 00:00:06.6354381]   Discovering: Catalog.FunctionalTests[xUnit.net 00:00:07.0010904]   Discovered:  Catalog.FunctionalTests[xUnit.net 00:00:07.0749761]   Starting:    Catalog.FunctionalTests[xUnit.net 00:00:34.9063753]   Finished:    Catalog.FunctionalTests</StdOut> |  | ||||||
|     </Output> |  | ||||||
|   </ResultSummary> |  | ||||||
| </TestRun> |  | ||||||
| @ -1,47 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <TestRun id="3a97bc8e-e891-4670-ac89-22922c2d9e4e" name="@02643924d223 2018-12-05 11:23:54" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"> |  | ||||||
|   <Times creation="2018-12-05T11:23:54.0687389+00:00" queuing="2018-12-05T11:23:54.0687396+00:00" start="2018-12-05T11:23:22.5634952+00:00" finish="2018-12-05T11:23:56.0218928+00:00" /> |  | ||||||
|   <TestSettings name="default" id="ba79b184-d368-4cf9-975b-e7ea85cae4ba"> |  | ||||||
|     <Deployment runDeploymentRoot="_02643924d223_2018-12-05_11_23_54" /> |  | ||||||
|   </TestSettings> |  | ||||||
|   <Results> |  | ||||||
|     <UnitTestResult executionId="84e4488c-e6c0-4fd4-b5e6-396e7865516e" testId="0a4f15a8-74cd-fd17-7e39-b261ab50b0e3" testName="Locations.FunctionalTests.LocationsScenarios.Get_all_locations_response_ok_status_code" computerName="02643924d223" duration="00:00:00.3200000" startTime="2018-12-05T11:23:55.5197180+00:00" endTime="2018-12-05T11:23:55.5197222+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="84e4488c-e6c0-4fd4-b5e6-396e7865516e" /> |  | ||||||
|     <UnitTestResult executionId="e37faea8-a757-4a58-b244-c4005b4501db" testId="9f640d81-acae-dd4a-697b-85843aab785c" testName="Locations.FunctionalTests.LocationsScenarios.Set_new_user_Washington_location_response_ok_status_code" computerName="02643924d223" duration="00:00:16.5720000" startTime="2018-12-05T11:23:53.8003308+00:00" endTime="2018-12-05T11:23:53.8003348+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="e37faea8-a757-4a58-b244-c4005b4501db" /> |  | ||||||
|     <UnitTestResult executionId="3823a765-a270-4120-9cd3-11144abd2828" testId="adcf9752-4680-18b6-26e1-869d93a37efb" testName="Locations.FunctionalTests.LocationsScenarios.Set_new_user_readmond_location_response_ok_status_code" computerName="02643924d223" duration="00:00:00.8560000" startTime="2018-12-05T11:23:54.6895078+00:00" endTime="2018-12-05T11:23:54.6895118+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="3823a765-a270-4120-9cd3-11144abd2828" /> |  | ||||||
|     <UnitTestResult executionId="a92e857d-8ad2-4a34-85d2-fcf2492c8597" testId="78effe18-892e-ff71-3706-701d8f4770b2" testName="Locations.FunctionalTests.LocationsScenarios.Set_new_user_seattle_location_response_ok_status_code" computerName="02643924d223" duration="00:00:00.5060000" startTime="2018-12-05T11:23:55.1956204+00:00" endTime="2018-12-05T11:23:55.1956236+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="a92e857d-8ad2-4a34-85d2-fcf2492c8597" /> |  | ||||||
|   </Results> |  | ||||||
|   <TestDefinitions> |  | ||||||
|     <UnitTest name="Locations.FunctionalTests.LocationsScenarios.Set_new_user_Washington_location_response_ok_status_code" storage="/src/src/services/location/locations.functionaltests/bin/debug/netcoreapp2.1/locations.functionaltests.dll" id="9f640d81-acae-dd4a-697b-85843aab785c"> |  | ||||||
|       <Execution id="e37faea8-a757-4a58-b244-c4005b4501db" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Location/Locations.FunctionalTests/bin/Debug/netcoreapp2.1/Locations.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Locations.FunctionalTests" name="Locations.FunctionalTests.LocationsScenarios.Set_new_user_Washington_location_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Locations.FunctionalTests.LocationsScenarios.Set_new_user_seattle_location_response_ok_status_code" storage="/src/src/services/location/locations.functionaltests/bin/debug/netcoreapp2.1/locations.functionaltests.dll" id="78effe18-892e-ff71-3706-701d8f4770b2"> |  | ||||||
|       <Execution id="a92e857d-8ad2-4a34-85d2-fcf2492c8597" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Location/Locations.FunctionalTests/bin/Debug/netcoreapp2.1/Locations.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Locations.FunctionalTests" name="Locations.FunctionalTests.LocationsScenarios.Set_new_user_seattle_location_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Locations.FunctionalTests.LocationsScenarios.Set_new_user_readmond_location_response_ok_status_code" storage="/src/src/services/location/locations.functionaltests/bin/debug/netcoreapp2.1/locations.functionaltests.dll" id="adcf9752-4680-18b6-26e1-869d93a37efb"> |  | ||||||
|       <Execution id="3823a765-a270-4120-9cd3-11144abd2828" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Location/Locations.FunctionalTests/bin/Debug/netcoreapp2.1/Locations.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Locations.FunctionalTests" name="Locations.FunctionalTests.LocationsScenarios.Set_new_user_readmond_location_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Locations.FunctionalTests.LocationsScenarios.Get_all_locations_response_ok_status_code" storage="/src/src/services/location/locations.functionaltests/bin/debug/netcoreapp2.1/locations.functionaltests.dll" id="0a4f15a8-74cd-fd17-7e39-b261ab50b0e3"> |  | ||||||
|       <Execution id="84e4488c-e6c0-4fd4-b5e6-396e7865516e" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Location/Locations.FunctionalTests/bin/Debug/netcoreapp2.1/Locations.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Locations.FunctionalTests" name="Locations.FunctionalTests.LocationsScenarios.Get_all_locations_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|   </TestDefinitions> |  | ||||||
|   <TestEntries> |  | ||||||
|     <TestEntry testId="0a4f15a8-74cd-fd17-7e39-b261ab50b0e3" executionId="84e4488c-e6c0-4fd4-b5e6-396e7865516e" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="9f640d81-acae-dd4a-697b-85843aab785c" executionId="e37faea8-a757-4a58-b244-c4005b4501db" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="adcf9752-4680-18b6-26e1-869d93a37efb" executionId="3823a765-a270-4120-9cd3-11144abd2828" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="78effe18-892e-ff71-3706-701d8f4770b2" executionId="a92e857d-8ad2-4a34-85d2-fcf2492c8597" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|   </TestEntries> |  | ||||||
|   <TestLists> |  | ||||||
|     <TestList name="Results Not in a List" id="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestList name="All Loaded Results" id="19431567-8539-422a-85d7-44ee4e166bda" /> |  | ||||||
|   </TestLists> |  | ||||||
|   <ResultSummary outcome="Completed"> |  | ||||||
|     <Counters total="4" executed="4" passed="4" failed="0" error="0" timeout="0" aborted="0" inconclusive="0" passedButRunAborted="0" notRunnable="0" notExecuted="0" disconnected="0" warning="0" completed="0" inProgress="0" pending="0" /> |  | ||||||
|     <Output> |  | ||||||
|       <StdOut>[xUnit.net 00:00:07.7665792]   Discovering: Locations.FunctionalTests[xUnit.net 00:00:08.1972548]   Discovered:  Locations.FunctionalTests[xUnit.net 00:00:08.2137816]   Starting:    Locations.FunctionalTests[xUnit.net 00:00:27.6429580]   Finished:    Locations.FunctionalTests</StdOut> |  | ||||||
|     </Output> |  | ||||||
|   </ResultSummary> |  | ||||||
| </TestRun> |  | ||||||
| @ -1,77 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <TestRun id="38518ece-89c2-4acd-a0fd-656b1e307ada" name="@e469457725ad 2018-11-29 09:07:47" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"> |  | ||||||
|   <Times creation="2018-11-29T09:07:47.0107904+00:00" queuing="2018-11-29T09:07:47.0107911+00:00" start="2018-11-29T09:07:40.0471464+00:00" finish="2018-11-29T09:07:48.5378505+00:00" /> |  | ||||||
|   <TestSettings name="default" id="65290455-25be-41ac-ae76-614d242990ab"> |  | ||||||
|     <Deployment runDeploymentRoot="_e469457725ad_2018-11-29_09_07_47" /> |  | ||||||
|   </TestSettings> |  | ||||||
|   <Results> |  | ||||||
|     <UnitTestResult executionId="9079d887-1d03-4651-bbad-465e5ecbe247" testId="e0c885da-83ce-b300-fe65-41c3a5c5e28f" testName="Marketing.FunctionalTests.CampaignScenarios.Post_add_new_campaign_and_response_ok_status_code" computerName="e469457725ad" duration="00:00:00.2420000" startTime="2018-11-29T09:07:47.7537302+00:00" endTime="2018-11-29T09:07:47.7537324+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="9079d887-1d03-4651-bbad-465e5ecbe247" /> |  | ||||||
|     <UnitTestResult executionId="bac3bbc1-e916-4001-bfc1-4a2b4d578faf" testId="6d91b76f-00a6-9e69-4202-48e6be1280e9" testName="Marketing.FunctionalTests.CampaignScenarios.Delete_delete_campaign_and_response_not_content_status_code" computerName="e469457725ad" duration="00:00:00.5630000" startTime="2018-11-29T09:07:47.5120976+00:00" endTime="2018-11-29T09:07:47.5120997+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="bac3bbc1-e916-4001-bfc1-4a2b4d578faf" /> |  | ||||||
|     <UnitTestResult executionId="89f0c88d-f352-4fd5-85cd-4dc346996fea" testId="348d43c5-3f68-e1a0-fd14-f5a7c75fe894" testName="Marketing.FunctionalTests.CampaignScenarios.Put_update_campaign_and_response_not_content_status_code" computerName="e469457725ad" duration="00:00:00.2430000" startTime="2018-11-29T09:07:48.3667923+00:00" endTime="2018-11-29T09:07:48.3667945+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="89f0c88d-f352-4fd5-85cd-4dc346996fea" /> |  | ||||||
|     <UnitTestResult executionId="e4910f38-9f2b-4de5-a3cf-cdefde7af357" testId="b465ea84-27b5-101d-9b64-ecc018001e3e" testName="Marketing.FunctionalTests.UserLocationRoleScenarios.Post_add_new_user_location_rule_and_response_ok_status_code" computerName="e469457725ad" duration="00:00:04.2610000" startTime="2018-11-29T09:07:46.9693733+00:00" endTime="2018-11-29T09:07:46.9693747+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="e4910f38-9f2b-4de5-a3cf-cdefde7af357" /> |  | ||||||
|     <UnitTestResult executionId="a4d3c593-a9cb-4f37-a5b4-3404d5496594" testId="ac8ded60-54fb-4bef-36a0-5ca98eec474b" testName="Marketing.FunctionalTests.UserLocationRoleScenarios.Delete_delete_user_location_role_and_response_not_content_status_code" computerName="e469457725ad" duration="00:00:00.3710000" startTime="2018-11-29T09:07:47.3200667+00:00" endTime="2018-11-29T09:07:47.3200687+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="a4d3c593-a9cb-4f37-a5b4-3404d5496594" /> |  | ||||||
|     <UnitTestResult executionId="d66b1878-5d11-4e5e-a78b-0ab518db2f52" testId="fe5e0cf5-7915-7cc0-9822-1ea6a9002829" testName="Marketing.FunctionalTests.CampaignScenarios.Get_get_campaign_by_id_and_response_ok_status_code" computerName="e469457725ad" duration="00:00:00.1260000" startTime="2018-11-29T09:07:48.1241966+00:00" endTime="2018-11-29T09:07:48.1241985+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="d66b1878-5d11-4e5e-a78b-0ab518db2f52" /> |  | ||||||
|     <UnitTestResult executionId="9eacbc3d-b815-4fd8-a2cf-c9e173057a86" testId="b65e6fb5-507d-2399-aedb-c39bbd53dd13" testName="Marketing.FunctionalTests.CampaignScenarios.Get_get_all_campaigns_and_response_ok_status_code" computerName="e469457725ad" duration="00:00:00.2440000" startTime="2018-11-29T09:07:47.9976626+00:00" endTime="2018-11-29T09:07:47.9976648+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="9eacbc3d-b815-4fd8-a2cf-c9e173057a86" /> |  | ||||||
|     <UnitTestResult executionId="559fc908-d6b4-45c0-b2cc-1ec5ebf98a10" testId="42f7ecfc-c654-ab9c-0945-cfba3b51b47e" testName="Marketing.FunctionalTests.UserLocationRoleScenarios.Get_get_all_user_location_rules_by_campaignId_and_response_ok_status_code" computerName="e469457725ad" duration="00:00:00.4090000" startTime="2018-11-29T09:07:47.7294469+00:00" endTime="2018-11-29T09:07:47.7294490+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="559fc908-d6b4-45c0-b2cc-1ec5ebf98a10" /> |  | ||||||
|     <UnitTestResult executionId="3d7664b0-c660-41c2-bd10-6241c8bf48bb" testId="cc442a4b-50c1-22da-f021-97ab6639da3e" testName="Marketing.FunctionalTests.CampaignScenarios.Get_get_campaign_by_id_and_response_not_found_status_code" computerName="e469457725ad" duration="00:00:04.2610000" startTime="2018-11-29T09:07:46.9468875+00:00" endTime="2018-11-29T09:07:46.9468901+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="3d7664b0-c660-41c2-bd10-6241c8bf48bb" /> |  | ||||||
|   </Results> |  | ||||||
|   <TestDefinitions> |  | ||||||
|     <UnitTest name="Marketing.FunctionalTests.UserLocationRoleScenarios.Get_get_all_user_location_rules_by_campaignId_and_response_ok_status_code" storage="/src/src/services/marketing/marketing.functionaltests/bin/debug/netcoreapp2.1/marketing.functionaltests.dll" id="42f7ecfc-c654-ab9c-0945-cfba3b51b47e"> |  | ||||||
|       <Execution id="559fc908-d6b4-45c0-b2cc-1ec5ebf98a10" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Marketing/Marketing.FunctionalTests/bin/Debug/netcoreapp2.1/Marketing.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Marketing.FunctionalTests" name="Marketing.FunctionalTests.UserLocationRoleScenarios.Get_get_all_user_location_rules_by_campaignId_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Marketing.FunctionalTests.CampaignScenarios.Get_get_all_campaigns_and_response_ok_status_code" storage="/src/src/services/marketing/marketing.functionaltests/bin/debug/netcoreapp2.1/marketing.functionaltests.dll" id="b65e6fb5-507d-2399-aedb-c39bbd53dd13"> |  | ||||||
|       <Execution id="9eacbc3d-b815-4fd8-a2cf-c9e173057a86" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Marketing/Marketing.FunctionalTests/bin/Debug/netcoreapp2.1/Marketing.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Marketing.FunctionalTests" name="Marketing.FunctionalTests.CampaignScenarios.Get_get_all_campaigns_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Marketing.FunctionalTests.CampaignScenarios.Post_add_new_campaign_and_response_ok_status_code" storage="/src/src/services/marketing/marketing.functionaltests/bin/debug/netcoreapp2.1/marketing.functionaltests.dll" id="e0c885da-83ce-b300-fe65-41c3a5c5e28f"> |  | ||||||
|       <Execution id="9079d887-1d03-4651-bbad-465e5ecbe247" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Marketing/Marketing.FunctionalTests/bin/Debug/netcoreapp2.1/Marketing.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Marketing.FunctionalTests" name="Marketing.FunctionalTests.CampaignScenarios.Post_add_new_campaign_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Marketing.FunctionalTests.CampaignScenarios.Get_get_campaign_by_id_and_response_not_found_status_code" storage="/src/src/services/marketing/marketing.functionaltests/bin/debug/netcoreapp2.1/marketing.functionaltests.dll" id="cc442a4b-50c1-22da-f021-97ab6639da3e"> |  | ||||||
|       <Execution id="3d7664b0-c660-41c2-bd10-6241c8bf48bb" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Marketing/Marketing.FunctionalTests/bin/Debug/netcoreapp2.1/Marketing.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Marketing.FunctionalTests" name="Marketing.FunctionalTests.CampaignScenarios.Get_get_campaign_by_id_and_response_not_found_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Marketing.FunctionalTests.UserLocationRoleScenarios.Post_add_new_user_location_rule_and_response_ok_status_code" storage="/src/src/services/marketing/marketing.functionaltests/bin/debug/netcoreapp2.1/marketing.functionaltests.dll" id="b465ea84-27b5-101d-9b64-ecc018001e3e"> |  | ||||||
|       <Execution id="e4910f38-9f2b-4de5-a3cf-cdefde7af357" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Marketing/Marketing.FunctionalTests/bin/Debug/netcoreapp2.1/Marketing.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Marketing.FunctionalTests" name="Marketing.FunctionalTests.UserLocationRoleScenarios.Post_add_new_user_location_rule_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Marketing.FunctionalTests.CampaignScenarios.Get_get_campaign_by_id_and_response_ok_status_code" storage="/src/src/services/marketing/marketing.functionaltests/bin/debug/netcoreapp2.1/marketing.functionaltests.dll" id="fe5e0cf5-7915-7cc0-9822-1ea6a9002829"> |  | ||||||
|       <Execution id="d66b1878-5d11-4e5e-a78b-0ab518db2f52" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Marketing/Marketing.FunctionalTests/bin/Debug/netcoreapp2.1/Marketing.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Marketing.FunctionalTests" name="Marketing.FunctionalTests.CampaignScenarios.Get_get_campaign_by_id_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Marketing.FunctionalTests.UserLocationRoleScenarios.Delete_delete_user_location_role_and_response_not_content_status_code" storage="/src/src/services/marketing/marketing.functionaltests/bin/debug/netcoreapp2.1/marketing.functionaltests.dll" id="ac8ded60-54fb-4bef-36a0-5ca98eec474b"> |  | ||||||
|       <Execution id="a4d3c593-a9cb-4f37-a5b4-3404d5496594" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Marketing/Marketing.FunctionalTests/bin/Debug/netcoreapp2.1/Marketing.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Marketing.FunctionalTests" name="Marketing.FunctionalTests.UserLocationRoleScenarios.Delete_delete_user_location_role_and_response_not_content_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Marketing.FunctionalTests.CampaignScenarios.Put_update_campaign_and_response_not_content_status_code" storage="/src/src/services/marketing/marketing.functionaltests/bin/debug/netcoreapp2.1/marketing.functionaltests.dll" id="348d43c5-3f68-e1a0-fd14-f5a7c75fe894"> |  | ||||||
|       <Execution id="89f0c88d-f352-4fd5-85cd-4dc346996fea" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Marketing/Marketing.FunctionalTests/bin/Debug/netcoreapp2.1/Marketing.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Marketing.FunctionalTests" name="Marketing.FunctionalTests.CampaignScenarios.Put_update_campaign_and_response_not_content_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Marketing.FunctionalTests.CampaignScenarios.Delete_delete_campaign_and_response_not_content_status_code" storage="/src/src/services/marketing/marketing.functionaltests/bin/debug/netcoreapp2.1/marketing.functionaltests.dll" id="6d91b76f-00a6-9e69-4202-48e6be1280e9"> |  | ||||||
|       <Execution id="bac3bbc1-e916-4001-bfc1-4a2b4d578faf" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Marketing/Marketing.FunctionalTests/bin/Debug/netcoreapp2.1/Marketing.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Marketing.FunctionalTests" name="Marketing.FunctionalTests.CampaignScenarios.Delete_delete_campaign_and_response_not_content_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|   </TestDefinitions> |  | ||||||
|   <TestEntries> |  | ||||||
|     <TestEntry testId="e0c885da-83ce-b300-fe65-41c3a5c5e28f" executionId="9079d887-1d03-4651-bbad-465e5ecbe247" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="6d91b76f-00a6-9e69-4202-48e6be1280e9" executionId="bac3bbc1-e916-4001-bfc1-4a2b4d578faf" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="348d43c5-3f68-e1a0-fd14-f5a7c75fe894" executionId="89f0c88d-f352-4fd5-85cd-4dc346996fea" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="b465ea84-27b5-101d-9b64-ecc018001e3e" executionId="e4910f38-9f2b-4de5-a3cf-cdefde7af357" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="ac8ded60-54fb-4bef-36a0-5ca98eec474b" executionId="a4d3c593-a9cb-4f37-a5b4-3404d5496594" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="fe5e0cf5-7915-7cc0-9822-1ea6a9002829" executionId="d66b1878-5d11-4e5e-a78b-0ab518db2f52" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="b65e6fb5-507d-2399-aedb-c39bbd53dd13" executionId="9eacbc3d-b815-4fd8-a2cf-c9e173057a86" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="42f7ecfc-c654-ab9c-0945-cfba3b51b47e" executionId="559fc908-d6b4-45c0-b2cc-1ec5ebf98a10" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="cc442a4b-50c1-22da-f021-97ab6639da3e" executionId="3d7664b0-c660-41c2-bd10-6241c8bf48bb" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|   </TestEntries> |  | ||||||
|   <TestLists> |  | ||||||
|     <TestList name="Results Not in a List" id="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestList name="All Loaded Results" id="19431567-8539-422a-85d7-44ee4e166bda" /> |  | ||||||
|   </TestLists> |  | ||||||
|   <ResultSummary outcome="Completed"> |  | ||||||
|     <Counters total="9" executed="9" passed="9" failed="0" error="0" timeout="0" aborted="0" inconclusive="0" passedButRunAborted="0" notRunnable="0" notExecuted="0" disconnected="0" warning="0" completed="0" inProgress="0" pending="0" /> |  | ||||||
|     <Output> |  | ||||||
|       <StdOut>[xUnit.net 00:00:01.0963036]   Discovering: Marketing.FunctionalTests[xUnit.net 00:00:01.1452772]   Discovered:  Marketing.FunctionalTests[xUnit.net 00:00:01.1494340]   Starting:    Marketing.FunctionalTests[xUnit.net 00:00:06.9663675]   Finished:    Marketing.FunctionalTests</StdOut> |  | ||||||
|     </Output> |  | ||||||
|   </ResultSummary> |  | ||||||
| </TestRun> |  | ||||||
| @ -1,41 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <TestRun id="f2920e88-61ef-4a6b-aeb1-22e22e9c820a" name="@3aa4f0b77384 2018-12-05 11:24:14" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"> |  | ||||||
|   <Times creation="2018-12-05T11:24:14.6310887+00:00" queuing="2018-12-05T11:24:14.6310894+00:00" start="2018-12-05T11:23:51.8232085+00:00" finish="2018-12-05T11:24:16.1186394+00:00" /> |  | ||||||
|   <TestSettings name="default" id="1fb5b13d-2c79-4e35-9f5b-7e948c6a4a6e"> |  | ||||||
|     <Deployment runDeploymentRoot="_3aa4f0b77384_2018-12-05_11_24_14" /> |  | ||||||
|   </TestSettings> |  | ||||||
|   <Results> |  | ||||||
|     <UnitTestResult executionId="6776e376-4d25-4edb-ae03-414a233ca4ad" testId="01ee4a4c-4b61-ec68-b1de-10796cc68607" testName="Ordering.FunctionalTests.OrderingScenarios.Ship_order_no_order_created_bad_request_response" computerName="3aa4f0b77384" duration="00:00:00.5480000" startTime="2018-12-05T11:24:15.8390084+00:00" endTime="2018-12-05T11:24:15.8390117+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="6776e376-4d25-4edb-ae03-414a233ca4ad" /> |  | ||||||
|     <UnitTestResult executionId="74045a0b-4d4a-4b22-87e1-78326dd52a88" testId="37ee8be5-0517-c735-d707-a8dcd6ba7613" testName="Ordering.FunctionalTests.OrderingScenarios.Get_get_all_stored_orders_and_response_ok_status_code" computerName="3aa4f0b77384" duration="00:00:00.7200000" startTime="2018-12-05T11:24:15.2884525+00:00" endTime="2018-12-05T11:24:15.2884560+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="74045a0b-4d4a-4b22-87e1-78326dd52a88" /> |  | ||||||
|     <UnitTestResult executionId="006ece7e-25eb-4250-a460-400c28a819f5" testId="8c1a2207-d19c-0b78-dd96-df617732922c" testName="Ordering.FunctionalTests.OrderingScenarios.Cancel_order_no_order_created_bad_request_response" computerName="3aa4f0b77384" duration="00:00:12.5450000" startTime="2018-12-05T11:24:14.5454681+00:00" endTime="2018-12-05T11:24:14.5454717+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="006ece7e-25eb-4250-a460-400c28a819f5" /> |  | ||||||
|   </Results> |  | ||||||
|   <TestDefinitions> |  | ||||||
|     <UnitTest name="Ordering.FunctionalTests.OrderingScenarios.Ship_order_no_order_created_bad_request_response" storage="/src/src/services/ordering/ordering.functionaltests/bin/debug/netcoreapp2.1/ordering.functionaltests.dll" id="01ee4a4c-4b61-ec68-b1de-10796cc68607"> |  | ||||||
|       <Execution id="6776e376-4d25-4edb-ae03-414a233ca4ad" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Ordering/Ordering.FunctionalTests/bin/Debug/netcoreapp2.1/Ordering.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Ordering.FunctionalTests" name="Ordering.FunctionalTests.OrderingScenarios.Ship_order_no_order_created_bad_request_response" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Ordering.FunctionalTests.OrderingScenarios.Cancel_order_no_order_created_bad_request_response" storage="/src/src/services/ordering/ordering.functionaltests/bin/debug/netcoreapp2.1/ordering.functionaltests.dll" id="8c1a2207-d19c-0b78-dd96-df617732922c"> |  | ||||||
|       <Execution id="006ece7e-25eb-4250-a460-400c28a819f5" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Ordering/Ordering.FunctionalTests/bin/Debug/netcoreapp2.1/Ordering.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Ordering.FunctionalTests" name="Ordering.FunctionalTests.OrderingScenarios.Cancel_order_no_order_created_bad_request_response" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Ordering.FunctionalTests.OrderingScenarios.Get_get_all_stored_orders_and_response_ok_status_code" storage="/src/src/services/ordering/ordering.functionaltests/bin/debug/netcoreapp2.1/ordering.functionaltests.dll" id="37ee8be5-0517-c735-d707-a8dcd6ba7613"> |  | ||||||
|       <Execution id="74045a0b-4d4a-4b22-87e1-78326dd52a88" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Ordering/Ordering.FunctionalTests/bin/Debug/netcoreapp2.1/Ordering.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Ordering.FunctionalTests" name="Ordering.FunctionalTests.OrderingScenarios.Get_get_all_stored_orders_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|   </TestDefinitions> |  | ||||||
|   <TestEntries> |  | ||||||
|     <TestEntry testId="01ee4a4c-4b61-ec68-b1de-10796cc68607" executionId="6776e376-4d25-4edb-ae03-414a233ca4ad" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="37ee8be5-0517-c735-d707-a8dcd6ba7613" executionId="74045a0b-4d4a-4b22-87e1-78326dd52a88" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="8c1a2207-d19c-0b78-dd96-df617732922c" executionId="006ece7e-25eb-4250-a460-400c28a819f5" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|   </TestEntries> |  | ||||||
|   <TestLists> |  | ||||||
|     <TestList name="Results Not in a List" id="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestList name="All Loaded Results" id="19431567-8539-422a-85d7-44ee4e166bda" /> |  | ||||||
|   </TestLists> |  | ||||||
|   <ResultSummary outcome="Completed"> |  | ||||||
|     <Counters total="3" executed="3" passed="3" failed="0" error="0" timeout="0" aborted="0" inconclusive="0" passedButRunAborted="0" notRunnable="0" notExecuted="0" disconnected="0" warning="0" completed="0" inProgress="0" pending="0" /> |  | ||||||
|     <Output> |  | ||||||
|       <StdOut>[xUnit.net 00:00:05.2039980]   Discovering: Ordering.FunctionalTests[xUnit.net 00:00:05.4802527]   Discovered:  Ordering.FunctionalTests[xUnit.net 00:00:05.5249888]   Starting:    Ordering.FunctionalTests[xUnit.net 00:00:20.1396674]   Finished:    Ordering.FunctionalTests</StdOut> |  | ||||||
|     </Output> |  | ||||||
|   </ResultSummary> |  | ||||||
| </TestRun> |  | ||||||
| @ -1,41 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <TestRun id="2c3747dd-fc05-4392-a731-de2f32a62eef" name="@2b67e7387bb9 2018-12-05 11:24:14" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"> |  | ||||||
|   <Times creation="2018-12-05T11:24:14.5102211+00:00" queuing="2018-12-05T11:24:14.5102222+00:00" start="2018-12-05T11:23:50.0598477+00:00" finish="2018-12-05T11:24:15.8957360+00:00" /> |  | ||||||
|   <TestSettings name="default" id="cda9c3c1-e5e4-4684-8b96-7eed6663bec0"> |  | ||||||
|     <Deployment runDeploymentRoot="_2b67e7387bb9_2018-12-05_11_24_14" /> |  | ||||||
|   </TestSettings> |  | ||||||
|   <Results> |  | ||||||
|     <UnitTestResult executionId="1d45c572-59de-4d7f-8f9c-d69b5dadbf02" testId="8c1a2207-d19c-0b78-dd96-df617732922c" testName="Ordering.FunctionalTests.OrderingScenarios.Cancel_order_no_order_created_bad_request_response" computerName="2b67e7387bb9" duration="00:00:13.3130000" startTime="2018-12-05T11:24:14.4257017+00:00" endTime="2018-12-05T11:24:14.4257056+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="1d45c572-59de-4d7f-8f9c-d69b5dadbf02" /> |  | ||||||
|     <UnitTestResult executionId="9e229357-8b76-4569-914b-6030866ee316" testId="37ee8be5-0517-c735-d707-a8dcd6ba7613" testName="Ordering.FunctionalTests.OrderingScenarios.Get_get_all_stored_orders_and_response_ok_status_code" computerName="2b67e7387bb9" duration="00:00:00.6970000" startTime="2018-12-05T11:24:15.1362290+00:00" endTime="2018-12-05T11:24:15.1362337+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="9e229357-8b76-4569-914b-6030866ee316" /> |  | ||||||
|     <UnitTestResult executionId="1e2ff621-c28c-49de-bfe7-d890ac94d9e6" testId="01ee4a4c-4b61-ec68-b1de-10796cc68607" testName="Ordering.FunctionalTests.OrderingScenarios.Ship_order_no_order_created_bad_request_response" computerName="2b67e7387bb9" duration="00:00:00.4950000" startTime="2018-12-05T11:24:15.6429216+00:00" endTime="2018-12-05T11:24:15.6429254+00:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="1e2ff621-c28c-49de-bfe7-d890ac94d9e6" /> |  | ||||||
|   </Results> |  | ||||||
|   <TestDefinitions> |  | ||||||
|     <UnitTest name="Ordering.FunctionalTests.OrderingScenarios.Ship_order_no_order_created_bad_request_response" storage="/src/src/services/ordering/ordering.functionaltests/bin/debug/netcoreapp2.1/ordering.functionaltests.dll" id="01ee4a4c-4b61-ec68-b1de-10796cc68607"> |  | ||||||
|       <Execution id="1e2ff621-c28c-49de-bfe7-d890ac94d9e6" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Ordering/Ordering.FunctionalTests/bin/Debug/netcoreapp2.1/Ordering.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Ordering.FunctionalTests" name="Ordering.FunctionalTests.OrderingScenarios.Ship_order_no_order_created_bad_request_response" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Ordering.FunctionalTests.OrderingScenarios.Cancel_order_no_order_created_bad_request_response" storage="/src/src/services/ordering/ordering.functionaltests/bin/debug/netcoreapp2.1/ordering.functionaltests.dll" id="8c1a2207-d19c-0b78-dd96-df617732922c"> |  | ||||||
|       <Execution id="1d45c572-59de-4d7f-8f9c-d69b5dadbf02" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Ordering/Ordering.FunctionalTests/bin/Debug/netcoreapp2.1/Ordering.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Ordering.FunctionalTests" name="Ordering.FunctionalTests.OrderingScenarios.Cancel_order_no_order_created_bad_request_response" /> |  | ||||||
|     </UnitTest> |  | ||||||
|     <UnitTest name="Ordering.FunctionalTests.OrderingScenarios.Get_get_all_stored_orders_and_response_ok_status_code" storage="/src/src/services/ordering/ordering.functionaltests/bin/debug/netcoreapp2.1/ordering.functionaltests.dll" id="37ee8be5-0517-c735-d707-a8dcd6ba7613"> |  | ||||||
|       <Execution id="9e229357-8b76-4569-914b-6030866ee316" /> |  | ||||||
|       <TestMethod codeBase="/src/src/Services/Ordering/Ordering.FunctionalTests/bin/Debug/netcoreapp2.1/Ordering.FunctionalTests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="Ordering.FunctionalTests" name="Ordering.FunctionalTests.OrderingScenarios.Get_get_all_stored_orders_and_response_ok_status_code" /> |  | ||||||
|     </UnitTest> |  | ||||||
|   </TestDefinitions> |  | ||||||
|   <TestEntries> |  | ||||||
|     <TestEntry testId="8c1a2207-d19c-0b78-dd96-df617732922c" executionId="1d45c572-59de-4d7f-8f9c-d69b5dadbf02" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="37ee8be5-0517-c735-d707-a8dcd6ba7613" executionId="9e229357-8b76-4569-914b-6030866ee316" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestEntry testId="01ee4a4c-4b61-ec68-b1de-10796cc68607" executionId="1e2ff621-c28c-49de-bfe7-d890ac94d9e6" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|   </TestEntries> |  | ||||||
|   <TestLists> |  | ||||||
|     <TestList name="Results Not in a List" id="8c84fa94-04c1-424b-9868-57a2d4851a1d" /> |  | ||||||
|     <TestList name="All Loaded Results" id="19431567-8539-422a-85d7-44ee4e166bda" /> |  | ||||||
|   </TestLists> |  | ||||||
|   <ResultSummary outcome="Completed"> |  | ||||||
|     <Counters total="3" executed="3" passed="3" failed="0" error="0" timeout="0" aborted="0" inconclusive="0" passedButRunAborted="0" notRunnable="0" notExecuted="0" disconnected="0" warning="0" completed="0" inProgress="0" pending="0" /> |  | ||||||
|     <Output> |  | ||||||
|       <StdOut>[xUnit.net 00:00:05.4257955]   Discovering: Ordering.FunctionalTests[xUnit.net 00:00:05.9560169]   Discovered:  Ordering.FunctionalTests[xUnit.net 00:00:05.9845906]   Starting:    Ordering.FunctionalTests[xUnit.net 00:00:21.2769127]   Finished:    Ordering.FunctionalTests</StdOut> |  | ||||||
|     </Output> |  | ||||||
|   </ResultSummary> |  | ||||||
| </TestRun> |  | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user