From 71814c6145a53fbb6b61db3368237e6f558ae227 Mon Sep 17 00:00:00 2001 From: jaroslavbliznak Date: Mon, 13 Nov 2023 11:41:39 +0100 Subject: [PATCH 1/2] FIX-2009 Update logCurveInfo properties --- Src/Witsml/CommonConstants.cs | 1 + .../Jobs/ModifyLogCurveInfoJob.cs | 57 ++++++ .../Jobs/RenameMnemonicJob.cs | 31 --- Src/WitsmlExplorer.Api/Models/JobType.cs | 2 +- Src/WitsmlExplorer.Api/Models/LogCurveInfo.cs | 2 + .../Services/LogObjectService.cs | 2 + .../Modify/ModifyLogCurveInfoWorker.cs | 184 ++++++++++++++++++ .../Workers/RenameMnemonicWorker.cs | 109 ----------- .../__testUtils__/testUtils.tsx | 2 + .../Modals/LogCurveInfoPropertiesModal.tsx | 33 +++- .../models/jobs/modifyLogCurveInfoJob.ts | 7 + .../models/jobs/renameMnemonicJob.ts | 7 - .../models/logCurveInfo.ts | 2 + .../services/jobService.tsx | 2 +- .../Workers/ModifyLogCurveInfoWorkerTests.cs | 166 ++++++++++++++++ .../Workers/RenameMnemonicWorkerTests.cs | 86 -------- .../Api/Workers/RenameMnemonicWorkerTests.cs | 16 +- 17 files changed, 459 insertions(+), 250 deletions(-) create mode 100644 Src/WitsmlExplorer.Api/Jobs/ModifyLogCurveInfoJob.cs delete mode 100644 Src/WitsmlExplorer.Api/Jobs/RenameMnemonicJob.cs create mode 100644 Src/WitsmlExplorer.Api/Workers/Modify/ModifyLogCurveInfoWorker.cs delete mode 100644 Src/WitsmlExplorer.Api/Workers/RenameMnemonicWorker.cs create mode 100644 Src/WitsmlExplorer.Frontend/models/jobs/modifyLogCurveInfoJob.ts delete mode 100644 Src/WitsmlExplorer.Frontend/models/jobs/renameMnemonicJob.ts create mode 100644 Tests/WitsmlExplorer.Api.Tests/Workers/ModifyLogCurveInfoWorkerTests.cs delete mode 100644 Tests/WitsmlExplorer.Api.Tests/Workers/RenameMnemonicWorkerTests.cs diff --git a/Src/Witsml/CommonConstants.cs b/Src/Witsml/CommonConstants.cs index 7613e5ff7..6b9e59017 100644 --- a/Src/Witsml/CommonConstants.cs +++ b/Src/Witsml/CommonConstants.cs @@ -8,4 +8,5 @@ public static class CommonConstants public const int DefaultNumberOfRoundedPlaces = 3; public const string DataSeparator = ","; public const string NewLine = "\n"; + public const string DefaultUnit = "unitless"; } diff --git a/Src/WitsmlExplorer.Api/Jobs/ModifyLogCurveInfoJob.cs b/Src/WitsmlExplorer.Api/Jobs/ModifyLogCurveInfoJob.cs new file mode 100644 index 000000000..b131a932d --- /dev/null +++ b/Src/WitsmlExplorer.Api/Jobs/ModifyLogCurveInfoJob.cs @@ -0,0 +1,57 @@ +using WitsmlExplorer.Api.Jobs.Common; +using WitsmlExplorer.Api.Models; + +namespace WitsmlExplorer.Api.Jobs +{ + /// + /// Job for modifying logCurveInfo. + /// + public record ModifyLogCurveInfoJob : Job + { + /// + /// ObjectReference API model. + /// + public ObjectReference LogReference { get; init; } + + /// + /// LogCurveInfo API model. + /// + public LogCurveInfo LogCurveInfo { get; init; } + + /// + /// Getting description of modified LogCurveInfo. + /// + /// + public override string Description() + { + return $"ToModify - {LogReference.Description()} LogCurveInfoUid: {LogCurveInfo.Uid};"; + } + + /// + /// Getting name of log. + /// + /// String of log name. + public override string GetObjectName() + { + return LogReference.Name; + } + + /// + /// Getting name of wellbore. + /// + /// String of wellbore name. + public override string GetWellboreName() + { + return LogReference.WellboreName; + } + + /// + /// Getting name of well. + /// + /// String of well name. + public override string GetWellName() + { + return LogReference.WellName; + } + } +} diff --git a/Src/WitsmlExplorer.Api/Jobs/RenameMnemonicJob.cs b/Src/WitsmlExplorer.Api/Jobs/RenameMnemonicJob.cs deleted file mode 100644 index c2b8e1e45..000000000 --- a/Src/WitsmlExplorer.Api/Jobs/RenameMnemonicJob.cs +++ /dev/null @@ -1,31 +0,0 @@ -using WitsmlExplorer.Api.Jobs.Common; - -namespace WitsmlExplorer.Api.Jobs -{ - public record RenameMnemonicJob : Job - { - public ObjectReference LogReference { get; init; } - public string Mnemonic { get; init; } - public string NewMnemonic { get; init; } - - public override string Description() - { - return $"Rename mnemonic - in Log: {LogReference.Description()} from mnemonic: {Mnemonic}; to mnemonic {NewMnemonic};"; - } - - public override string GetObjectName() - { - return LogReference.Name; - } - - public override string GetWellboreName() - { - return LogReference.WellboreName; - } - - public override string GetWellName() - { - return LogReference.WellName; - } - } -} diff --git a/Src/WitsmlExplorer.Api/Models/JobType.cs b/Src/WitsmlExplorer.Api/Models/JobType.cs index 8861c00a0..c2cdf057d 100644 --- a/Src/WitsmlExplorer.Api/Models/JobType.cs +++ b/Src/WitsmlExplorer.Api/Models/JobType.cs @@ -15,7 +15,7 @@ public enum JobType DeleteObjects, DeleteWell, DeleteWellbore, - RenameMnemonic, + ModifyLogCurveInfo, DeleteEmptyMnemonics, ModifyBhaRun, ModifyFormationMarker, diff --git a/Src/WitsmlExplorer.Api/Models/LogCurveInfo.cs b/Src/WitsmlExplorer.Api/Models/LogCurveInfo.cs index 7a0438186..83d9cce5e 100644 --- a/Src/WitsmlExplorer.Api/Models/LogCurveInfo.cs +++ b/Src/WitsmlExplorer.Api/Models/LogCurveInfo.cs @@ -17,5 +17,7 @@ public class LogCurveInfo public LengthMeasure SensorOffset { get; init; } public string MnemAlias { get; init; } public List AxisDefinitions { get; init; } + public string CurveDescription { get; init; } + public string TypeLogData { get; init; } } } diff --git a/Src/WitsmlExplorer.Api/Services/LogObjectService.cs b/Src/WitsmlExplorer.Api/Services/LogObjectService.cs index 35ea9aa8e..808d03e84 100644 --- a/Src/WitsmlExplorer.Api/Services/LogObjectService.cs +++ b/Src/WitsmlExplorer.Api/Services/LogObjectService.cs @@ -130,6 +130,8 @@ public async Task> GetLogCurveInfo(string wellUid, str MnemAlias = logCurveInfo.MnemAlias, SensorOffset = LengthMeasure.FromWitsml(logCurveInfo.SensorOffset), Unit = logCurveInfo.Unit, + CurveDescription = logCurveInfo.CurveDescription, + TypeLogData = logCurveInfo.TypeLogData, AxisDefinitions = logCurveInfo.AxisDefinitions?.Select(a => new AxisDefinition() { Uid = a.Uid, diff --git a/Src/WitsmlExplorer.Api/Workers/Modify/ModifyLogCurveInfoWorker.cs b/Src/WitsmlExplorer.Api/Workers/Modify/ModifyLogCurveInfoWorker.cs new file mode 100644 index 000000000..8815fb19f --- /dev/null +++ b/Src/WitsmlExplorer.Api/Workers/Modify/ModifyLogCurveInfoWorker.cs @@ -0,0 +1,184 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +using Microsoft.Extensions.Logging; + +using Witsml; +using Witsml.Data; +using Witsml.Extensions; +using Witsml.ServiceReference; + +using WitsmlExplorer.Api.Jobs; +using WitsmlExplorer.Api.Models; +using WitsmlExplorer.Api.Query; +using WitsmlExplorer.Api.Services; + +namespace WitsmlExplorer.Api.Workers.Modify +{ + /// + /// Worker for modifying logCurveInfo by specific well and wellbore. + /// + public class ModifyLogCurveInfoWorker : BaseWorker, IWorker + { + public JobType JobType => JobType.ModifyLogCurveInfo; + + public ModifyLogCurveInfoWorker(ILogger logger, IWitsmlClientProvider witsmlClientProvider) : base(witsmlClientProvider, logger) { } + + /// + /// Executes the modification of logCurveInfo based on the provided job. + /// + /// The job containing information for the modification. + /// Task of the workerResult with RefreshAction. + public override async Task<(WorkerResult, RefreshAction)> Execute(ModifyLogCurveInfoJob job) + { + Verify(job); + + IWitsmlClient client = GetTargetWitsmlClientOrThrow(); + WitsmlLog logHeader = await LogWorkerTools.GetLog(client, job.LogReference, ReturnElements.HeaderOnly); + if (logHeader == null) + { + var message = $"ModifyLogCurveInfoJob failed. Cannot find the witsml log for {job.Description()}"; + Logger.LogError(message); + return (new WorkerResult(GetTargetWitsmlClientOrThrow().GetServerHostname(), false, message), null); + } + + var originalLogCurveInfo = logHeader.LogCurveInfo.FirstOrDefault(c => c.Uid == job.LogCurveInfo.Uid); + if (originalLogCurveInfo == null) + { + var message = $"ModifyLogCurveInfoJob failed. Cannot find the witsml logCurveInfo for Uid {job.LogCurveInfo.Uid} of {job.Description()}"; + Logger.LogError(message); + return (new WorkerResult(GetTargetWitsmlClientOrThrow().GetServerHostname(), false, message), null); + } + + var originalLogCurveInfoMnemonic = originalLogCurveInfo.Mnemonic; + WitsmlLogs modifyLogCurveInfoQuery = GetModifyLogCurveInfoQuery(job, originalLogCurveInfo); + QueryResult modifyLogCurveInfoResult = await client.UpdateInStoreAsync(modifyLogCurveInfoQuery); + if (modifyLogCurveInfoResult.IsSuccessful) + { + Logger.LogInformation("LogCurveInfo modified. {jobDescription}", job.Description()); + } + else + { + const string errorMessage = "Failed to modify logCurveInfo object."; + Logger.LogError("{ErrorMessage}. {jobDescription}", errorMessage, job.Description()); + return (new WorkerResult(GetTargetWitsmlClientOrThrow().GetServerHostname(), false, errorMessage, modifyLogCurveInfoResult.Reason), null); + } + + if (originalLogCurveInfoMnemonic != job.LogCurveInfo.Mnemonic) + { + var originalMnemonics = GetMnemonics(logHeader, originalLogCurveInfoMnemonic); + var updatedMnemonics = string.Join(",", GetMnemonics(logHeader, job.LogCurveInfo.Mnemonic)); + var updatedUnits = string.Join(",", GetUnits(logHeader, job.LogCurveInfo.Unit)); + WitsmlLog modifyLogData = GetModifyLogDataQuery(job, updatedMnemonics, updatedUnits); + + await using LogDataReader logDataReader = new(client, logHeader, originalMnemonics, Logger); + WitsmlLogData logData = await logDataReader.GetNextBatch(); + while (logData != null) + { + modifyLogData.LogData.Data = logData.Data; + WitsmlLogs updatedLogs1 = new() { Logs = new List { modifyLogData } }; + QueryResult result = await client.UpdateInStoreAsync(updatedLogs1); + if (!result.IsSuccessful) + { + Logger.LogError("Failed to rename Mnemonic of logCurveInfo. {jobDescription}", job.Description()); + return ( + new WorkerResult(client.GetServerHostname(), false, $"Failed to rename Mnemonic from {originalLogCurveInfoMnemonic} to {job.LogCurveInfo.Mnemonic}", + result.Reason), + null); + } + + logData = await logDataReader.GetNextBatch(); + } + + WorkerResult resultDeleteOldMnemonic = + await DeleteOldMnemonic(job.LogReference.WellUid, job.LogReference.WellboreUid, job.LogReference.Uid, originalLogCurveInfoMnemonic); + if (!resultDeleteOldMnemonic.IsSuccess) + { + return (resultDeleteOldMnemonic, null); + } + } + + Logger.LogInformation("LogCurveInfo modified. {jobDescription}", job.Description()); + return ( + new WorkerResult(client.GetServerHostname(), true, $"LogCurveInfo updated ({job.LogCurveInfo.Uid})"), + new RefreshObjects(client.GetServerHostname(), job.LogReference.WellUid, job.LogReference.WellboreUid, EntityType.Log, job.LogReference.Uid)); + } + + private static WitsmlLog GetModifyLogDataQuery(ModifyLogCurveInfoJob job, string updatedMnemonics, string updatedUnits) + { + return new WitsmlLog + { + Uid = job.LogReference.Uid, + UidWellbore = job.LogReference.WellboreUid, + UidWell = job.LogReference.WellUid, + LogData = new WitsmlLogData { MnemonicList = updatedMnemonics, UnitList = updatedUnits } + }; + } + + private static WitsmlLogs GetModifyLogCurveInfoQuery(ModifyLogCurveInfoJob job, WitsmlLogCurveInfo originalLogCurveInfo) + { + if (originalLogCurveInfo.Mnemonic != job.LogCurveInfo.Mnemonic) + { + originalLogCurveInfo.Mnemonic = job.LogCurveInfo.Mnemonic; + originalLogCurveInfo.Uid = job.LogCurveInfo.Mnemonic; + } + + originalLogCurveInfo.Unit = job.LogCurveInfo.Unit; + originalLogCurveInfo.CurveDescription = job.LogCurveInfo.CurveDescription.NullIfEmpty(); + + return new() + { + Logs = new List + { + new() + { + UidWell = job.LogReference.WellUid, + UidWellbore = job.LogReference.WellboreUid, + Uid = job.LogReference.Uid, + LogCurveInfo = new List() { originalLogCurveInfo } + } + } + }; + } + + private async Task DeleteOldMnemonic(string wellUid, string wellboreUid, string logUid, string mnemonic) + { + WitsmlLogs query = LogQueries.DeleteMnemonics(wellUid, wellboreUid, logUid, new[] { mnemonic }); + QueryResult result = await GetTargetWitsmlClientOrThrow().DeleteFromStoreAsync(query); + if (result.IsSuccessful) + { + return new WorkerResult(GetTargetWitsmlClientOrThrow().GetServerHostname(), true, $"Successfully deleted old mnemonic"); + } + + Logger.LogError("Failed to delete old mnemonic. WellUid: {WellUid}, WellboreUid: {WellboreUid}, Uid: {LogUid}, Mnemonic: {Mnemonic}", wellUid, wellboreUid, logUid, + mnemonic); + return new WorkerResult(GetTargetWitsmlClientOrThrow().GetServerHostname(), false, $"Failed to delete old mnemonic {mnemonic} while renaming mnemonic", result.Reason); + } + + private static void Verify(ModifyLogCurveInfoJob job) + { + if (string.IsNullOrEmpty(job.LogCurveInfo.Mnemonic)) + { + throw new InvalidOperationException("An empty name is given when trying to rename a mnemonic. Make sure a valid name is given."); + } + + if (string.IsNullOrEmpty(job.LogCurveInfo.Unit)) + { + throw new InvalidOperationException("An empty unit is given when trying to change a unit. Make sure a valid unit is given."); + } + } + + private static List GetUnits(WitsmlLog log, string newUnit) + { + var indexCurveUnit = log.LogCurveInfo.FirstOrDefault(x => x.Mnemonic == log.IndexCurve.Value)?.Unit ?? CommonConstants.DefaultUnit; + return new List { indexCurveUnit, newUnit }; + } + + private static List GetMnemonics(WitsmlLog log, string mnemonic) + { + return new List { log.IndexCurve.Value, mnemonic }; + } + } +} diff --git a/Src/WitsmlExplorer.Api/Workers/RenameMnemonicWorker.cs b/Src/WitsmlExplorer.Api/Workers/RenameMnemonicWorker.cs deleted file mode 100644 index 36b5577d8..000000000 --- a/Src/WitsmlExplorer.Api/Workers/RenameMnemonicWorker.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -using Microsoft.Extensions.Logging; - -using Witsml; -using Witsml.Data; -using Witsml.Extensions; -using Witsml.ServiceReference; - -using WitsmlExplorer.Api.Jobs; -using WitsmlExplorer.Api.Models; -using WitsmlExplorer.Api.Query; -using WitsmlExplorer.Api.Services; - -namespace WitsmlExplorer.Api.Workers -{ - public class RenameMnemonicWorker : BaseWorker, IWorker - { - public JobType JobType => JobType.RenameMnemonic; - - public RenameMnemonicWorker(ILogger logger, IWitsmlClientProvider witsmlClientProvider) : base(witsmlClientProvider, logger) { } - - public override async Task<(WorkerResult, RefreshAction)> Execute(RenameMnemonicJob job) - { - Verify(job); - IWitsmlClient client = GetTargetWitsmlClientOrThrow(); - - WitsmlLog logHeader = await LogWorkerTools.GetLog(client, job.LogReference, ReturnElements.HeaderOnly); - - List mnemonics = GetMnemonics(logHeader, job.Mnemonic); - WitsmlLog updatedLog = new() - { - UidWell = logHeader.UidWell, - UidWellbore = logHeader.UidWellbore, - Uid = logHeader.Uid, - LogCurveInfo = logHeader.LogCurveInfo.Where(lci => mnemonics.Contains(lci.Mnemonic, StringComparer.OrdinalIgnoreCase)).ToList(), - }; - updatedLog.LogCurveInfo.Find(c => c.Mnemonic == job.Mnemonic)!.Mnemonic = job.NewMnemonic; - WitsmlLogs updatedLogs = new() { Logs = new() { updatedLog } }; - - if (!logHeader.IsEmpty()) - { - await using LogDataReader logDataReader = new(client, logHeader, mnemonics, Logger); - WitsmlLogData logData = await logDataReader.GetNextBatch(); - while (logData != null) - { - logData.MnemonicList = string.Join(",", GetMnemonics(logHeader, job.NewMnemonic)); - updatedLog.LogData = logData; - QueryResult result = await client.UpdateInStoreAsync(updatedLogs); - if (!result.IsSuccessful) - { - Logger.LogError("Failed to rename mnemonic. {jobDescription}", job.Description()); - return (new WorkerResult(client.GetServerHostname(), false, $"Failed to rename Mnemonic from {job.Mnemonic} to {job.NewMnemonic}", result.Reason), null); - } - logData = await logDataReader.GetNextBatch(); - } - } - - WorkerResult resultDeleteOldMnemonic = await DeleteOldMnemonic(job.LogReference.WellUid, job.LogReference.WellboreUid, job.LogReference.Uid, job.Mnemonic); - if (!resultDeleteOldMnemonic.IsSuccess) - { - return (resultDeleteOldMnemonic, null); - } - - Logger.LogInformation("{JobType} - Job successful. Mnemonic renamed from {Mnemonic} to {NewMnemonic}", GetType().Name, job.Mnemonic, job.NewMnemonic); - return ( - new WorkerResult(client.GetServerHostname(), true, $"Mnemonic renamed from {job.Mnemonic} to {job.NewMnemonic}"), - new RefreshObjects(client.GetServerHostname(), job.LogReference.WellUid, job.LogReference.WellboreUid, EntityType.Log, job.LogReference.Uid)); - } - - private async Task DeleteOldMnemonic(string wellUid, string wellboreUid, string logUid, string mnemonic) - { - WitsmlLogs query = LogQueries.DeleteMnemonics(wellUid, wellboreUid, logUid, new[] { mnemonic }); - QueryResult result = await GetTargetWitsmlClientOrThrow().DeleteFromStoreAsync(query); - if (result.IsSuccessful) - { - return new WorkerResult(GetTargetWitsmlClientOrThrow().GetServerHostname(), true, $"Successfully deleted old mnemonic"); - } - - Logger.LogError("Failed to delete old mnemonic. WellUid: {WellUid}, WellboreUid: {WellboreUid}, Uid: {LogUid}, Mnemonic: {Mnemonic}", wellUid, wellboreUid, logUid, mnemonic); - return new WorkerResult(GetTargetWitsmlClientOrThrow().GetServerHostname(), false, $"Failed to delete old mnemonic {mnemonic} while renaming mnemonic", result.Reason); - } - - private static void Verify(RenameMnemonicJob job) - { - if (string.IsNullOrEmpty(job.Mnemonic) || string.IsNullOrEmpty(job.NewMnemonic)) - { - throw new InvalidOperationException("Empty name given when trying to rename a mnemonic. Make sure valid names are given"); - } - else if (string.Equals(job.Mnemonic, job.NewMnemonic, StringComparison.OrdinalIgnoreCase)) - { - throw new InvalidOperationException("Cannot rename a mnemonic to the same name it already has. Make sure new mnemonic is a unique name"); - } - } - - private static List GetMnemonics(WitsmlLog log, string mnemonic) - { - return new List - { - log.IndexCurve.Value, - mnemonic - }; - } - } -} - diff --git a/Src/WitsmlExplorer.Frontend/__testUtils__/testUtils.tsx b/Src/WitsmlExplorer.Frontend/__testUtils__/testUtils.tsx index 6f61d6ea0..e0776f8db 100644 --- a/Src/WitsmlExplorer.Frontend/__testUtils__/testUtils.tsx +++ b/Src/WitsmlExplorer.Frontend/__testUtils__/testUtils.tsx @@ -404,6 +404,8 @@ export function getLogCurveInfo(overrides?: Partial): LogCurveInfo unit: "unit", mnemAlias: "mnemAlias", axisDefinitions: [], + curveDescription: "curveDescription", + typeLogData: "typeLogData", sensorOffset: getMeasure(), ...overrides }; diff --git a/Src/WitsmlExplorer.Frontend/components/Modals/LogCurveInfoPropertiesModal.tsx b/Src/WitsmlExplorer.Frontend/components/Modals/LogCurveInfoPropertiesModal.tsx index d157c68c7..5f59c3332 100644 --- a/Src/WitsmlExplorer.Frontend/components/Modals/LogCurveInfoPropertiesModal.tsx +++ b/Src/WitsmlExplorer.Frontend/components/Modals/LogCurveInfoPropertiesModal.tsx @@ -3,7 +3,7 @@ import React, { useEffect, useState } from "react"; import styled from "styled-components"; import { HideModalAction } from "../../contexts/operationStateReducer"; import OperationType from "../../contexts/operationType"; -import RenameMnemonicJob from "../../models/jobs/renameMnemonicJob"; +import ModifyLogCurveInfoJob from "../../models/jobs/modifyLogCurveInfoJob"; import LogCurveInfo from "../../models/logCurveInfo"; import LogObject from "../../models/logObject"; import { toObjectReference } from "../../models/objectOnWellbore"; @@ -23,12 +23,11 @@ const LogCurveInfoPropertiesModal = (props: LogCurveInfoPropertiesModalProps): R const onSubmit = async () => { setIsLoading(true); - const job: RenameMnemonicJob = { + const job: ModifyLogCurveInfoJob = { logReference: toObjectReference(selectedLog), - mnemonic: logCurveInfo.mnemonic, - newMnemonic: editableLogCurveInfo.mnemonic + logCurveInfo: editableLogCurveInfo }; - await JobService.orderJob(JobType.RenameMnemonic, job); + await JobService.orderJob(JobType.ModifyLogCurveInfo, job); setIsLoading(false); dispatchOperation({ type: OperationType.HideModal }); }; @@ -41,7 +40,6 @@ const LogCurveInfoPropertiesModal = (props: LogCurveInfoPropertiesModalProps): R <> {editableLogCurveInfo && ( @@ -51,11 +49,27 @@ const LogCurveInfoPropertiesModal = (props: LogCurveInfoPropertiesModalProps): R label="mnemonic" defaultValue={editableLogCurveInfo.mnemonic} error={editableLogCurveInfo.mnemonic.length === 0} - helperText={editableLogCurveInfo.mnemonic.length === 0 ? "A logCurveInfo mnemonic must be 1-64 characters" : ""} + helperText={editableLogCurveInfo.mnemonic.length === 0 ? "A logCurveInfo mnemonic cannot be empty. Size must be 1 to 64 characters." : ""} fullWidth inputProps={{ minLength: 1, maxLength: 64 }} onChange={(e) => setEditableLogCurveInfo({ ...editableLogCurveInfo, mnemonic: e.target.value })} /> + setEditableLogCurveInfo({ ...editableLogCurveInfo, unit: e.target.value })} + /> + setEditableLogCurveInfo({ ...editableLogCurveInfo, curveDescription: e.target.value })} + /> + + {logCurveInfo?.axisDefinitions?.map((axisDefinition) => { return ( @@ -68,6 +82,11 @@ const LogCurveInfoPropertiesModal = (props: LogCurveInfoPropertiesModalProps): R })} } + confirmDisabled={ + logCurveInfo.mnemonic == editableLogCurveInfo.mnemonic && + logCurveInfo.unit == editableLogCurveInfo.unit && + logCurveInfo.curveDescription == editableLogCurveInfo.curveDescription + } onSubmit={() => onSubmit()} isLoading={isLoading} /> diff --git a/Src/WitsmlExplorer.Frontend/models/jobs/modifyLogCurveInfoJob.ts b/Src/WitsmlExplorer.Frontend/models/jobs/modifyLogCurveInfoJob.ts new file mode 100644 index 000000000..88fd484a9 --- /dev/null +++ b/Src/WitsmlExplorer.Frontend/models/jobs/modifyLogCurveInfoJob.ts @@ -0,0 +1,7 @@ +import ObjectReference from "./objectReference"; +import LogCurveInfo from "../logCurveInfo"; + +export default interface ModifyLogCurveInfoJob { + logReference: ObjectReference; + logCurveInfo: LogCurveInfo; +} diff --git a/Src/WitsmlExplorer.Frontend/models/jobs/renameMnemonicJob.ts b/Src/WitsmlExplorer.Frontend/models/jobs/renameMnemonicJob.ts deleted file mode 100644 index 64582ae5c..000000000 --- a/Src/WitsmlExplorer.Frontend/models/jobs/renameMnemonicJob.ts +++ /dev/null @@ -1,7 +0,0 @@ -import ObjectReference from "./objectReference"; - -export default interface RenameMnemonicJob { - logReference: ObjectReference; - mnemonic: string; - newMnemonic: string; -} diff --git a/Src/WitsmlExplorer.Frontend/models/logCurveInfo.ts b/Src/WitsmlExplorer.Frontend/models/logCurveInfo.ts index bd4175e4a..8dcda4299 100644 --- a/Src/WitsmlExplorer.Frontend/models/logCurveInfo.ts +++ b/Src/WitsmlExplorer.Frontend/models/logCurveInfo.ts @@ -11,6 +11,8 @@ export default interface LogCurveInfo { classWitsml: string; unit: string; sensorOffset: Measure; + curveDescription: string; + typeLogData: string; mnemAlias: string; axisDefinitions: AxisDefinition[]; } diff --git a/Src/WitsmlExplorer.Frontend/services/jobService.tsx b/Src/WitsmlExplorer.Frontend/services/jobService.tsx index f751eb9cd..c434174e0 100644 --- a/Src/WitsmlExplorer.Frontend/services/jobService.tsx +++ b/Src/WitsmlExplorer.Frontend/services/jobService.tsx @@ -91,7 +91,7 @@ export enum JobType { ModifyRig = "ModifyRig", ModifyTrajectory = "ModifyTrajectory", ModifyRisk = "ModifyRisk", - RenameMnemonic = "RenameMnemonic", + ModifyLogCurveInfo = "ModifyLogCurveInfo", DeleteEmptyMnemonics = "DeleteEmptyMnemonics", ModifyTrajectoryStation = "ModifyTrajectoryStation", ModifyTubular = "ModifyTubular", diff --git a/Tests/WitsmlExplorer.Api.Tests/Workers/ModifyLogCurveInfoWorkerTests.cs b/Tests/WitsmlExplorer.Api.Tests/Workers/ModifyLogCurveInfoWorkerTests.cs new file mode 100644 index 000000000..2f0bdc44f --- /dev/null +++ b/Tests/WitsmlExplorer.Api.Tests/Workers/ModifyLogCurveInfoWorkerTests.cs @@ -0,0 +1,166 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +using Microsoft.Extensions.Logging; + +using Moq; + +using Serilog; + +using Witsml; +using Witsml.Data; +using Witsml.Data.Curves; +using Witsml.ServiceReference; + +using WitsmlExplorer.Api.Jobs; +using WitsmlExplorer.Api.Jobs.Common; +using WitsmlExplorer.Api.Models; +using WitsmlExplorer.Api.Services; +using WitsmlExplorer.Api.Workers.Modify; + +using Xunit; + +namespace WitsmlExplorer.Api.Tests.Workers +{ + public class ModifyLogCurveInfoWorkerTests + { + private readonly Mock _witsmlClient; + private readonly ModifyLogCurveInfoWorker _worker; + private const string WellUid = "wellUid"; + private const string WellboreUid = "wellboreUid"; + private const string LogUid = "logUid"; + + public ModifyLogCurveInfoWorkerTests() + { + Mock witsmlClientProvider = new(); + _witsmlClient = new Mock(); + witsmlClientProvider.Setup(provider => provider.GetClient()).Returns(_witsmlClient.Object); + ILoggerFactory loggerFactory = new LoggerFactory(); + loggerFactory.AddSerilog(Log.Logger); + ILogger logger = loggerFactory.CreateLogger(); + _worker = new ModifyLogCurveInfoWorker(logger, witsmlClientProvider.Object); + } + + [Fact] + public async void MnemonicEmpty_ModifyLogCurveInfo_ShouldThrowException() + { + ModifyLogCurveInfoJob job = CreateJobTemplate() with { LogCurveInfo = new LogCurveInfo() { Mnemonic = "" } }; + + Task ExecuteWorker() + { + return _worker.Execute(job); + } + + await Assert.ThrowsAsync(ExecuteWorker); + } + + [Fact] + public async void MnemonicNull_ModifyLogCurveInfo_ShouldThrowException() + { + ModifyLogCurveInfoJob job = CreateJobTemplate() with { LogCurveInfo = new LogCurveInfo() { Mnemonic = null } }; + + Task ExecuteWorker() + { + return _worker.Execute(job); + } + + await Assert.ThrowsAsync(ExecuteWorker); + } + + [Fact] + public async void ModifyLogCurveInfoProperties_Execute_ValidResults() + { + var expectedMnemonic = "Mnemonic1"; + var expectedUnit = "NewUnit"; + var expectedCurveDescription = "NewCurveDescription"; + + ModifyLogCurveInfoJob job = CreateJobTemplate() with + { + LogCurveInfo = new LogCurveInfo() { Uid = expectedMnemonic, Mnemonic = expectedMnemonic, Unit = expectedUnit, CurveDescription = expectedCurveDescription } + }; + + WitsmlLogs testWitsmlLogs = GetTestWitsmlLogs(); + + _witsmlClient + .Setup(client => + client.GetFromStoreAsync(It.IsAny(), It.IsAny())) + .Returns(Task.FromResult(testWitsmlLogs)); + + List updatedLogs = new(); + _witsmlClient.Setup(client => + client.UpdateInStoreAsync(It.IsAny())).Callback(logs => updatedLogs.Add(logs)) + .ReturnsAsync(new QueryResult(true)); + + await _worker.Execute(job); + + Assert.Single(updatedLogs); + Assert.Equal(expectedMnemonic, updatedLogs.First().Logs.First().LogCurveInfo.First().Mnemonic); + Assert.Equal(expectedUnit, updatedLogs.First().Logs.First().LogCurveInfo.First().Unit); + Assert.Equal(expectedCurveDescription, updatedLogs.First().Logs.First().LogCurveInfo.First().CurveDescription); + } + + [Fact] + public async void RenameMnemonic_Execute_ValidResults() + { + var originalUid = "Mnemonic1"; + var expectedMnemonic = "NewMnemonic"; + var expectedUnit = "m"; + + ModifyLogCurveInfoJob job = CreateJobTemplate() with { LogCurveInfo = new LogCurveInfo() { Uid = originalUid, Mnemonic = expectedMnemonic, Unit = expectedUnit } }; + + WitsmlLogs testWitsmlLogs = GetTestWitsmlLogs(); + + _witsmlClient + .Setup(client => + client.GetFromStoreAsync(It.IsAny(), It.IsAny())) + .Returns(Task.FromResult(testWitsmlLogs)); + + List updatedLogs = new(); + _witsmlClient.Setup(client => + client.UpdateInStoreAsync(It.IsAny())).Callback(logs => updatedLogs.Add(logs)) + .ReturnsAsync(new QueryResult(true)); + + _witsmlClient.Setup(client => + client.DeleteFromStoreAsync(It.IsAny())) + .ReturnsAsync(new QueryResult(true)); + + await _worker.Execute(job); + + Assert.Single(updatedLogs); + Assert.Equal(expectedMnemonic, updatedLogs.First().Logs.First().LogCurveInfo.First().Mnemonic); + } + + private WitsmlLogs GetTestWitsmlLogs() + { + return new WitsmlLogs + { + Logs = new List + { + new() + { + UidWell = WellUid, + UidWellbore = WellboreUid, + Uid = LogUid, + IndexCurve = new WitsmlIndexCurve() { Value = "Depth" }, + StartIndex = new WitsmlIndex(new DepthIndex(81, "m")), + EndIndex = new WitsmlIndex(new DepthIndex(88, "m")), + IndexType = WitsmlLog.WITSML_INDEX_TYPE_MD, + LogCurveInfo = new List + { + new() { Uid = "Depth", Mnemonic = "Depth", Unit = "m" }, + new() { Uid = "Mnemonic1", Mnemonic = "Mnemonic1", Unit = "m" }, + new() { Uid = "Mnemonic2", Mnemonic = "Mnemonic2", Unit = "ft" } + } + } + } + }; + } + + private static ModifyLogCurveInfoJob CreateJobTemplate() + { + return new ModifyLogCurveInfoJob { LogReference = new ObjectReference { WellUid = WellUid, WellboreUid = WellboreUid, Uid = LogUid } }; + } + } +} diff --git a/Tests/WitsmlExplorer.Api.Tests/Workers/RenameMnemonicWorkerTests.cs b/Tests/WitsmlExplorer.Api.Tests/Workers/RenameMnemonicWorkerTests.cs deleted file mode 100644 index 6ab316183..000000000 --- a/Tests/WitsmlExplorer.Api.Tests/Workers/RenameMnemonicWorkerTests.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Threading.Tasks; - -using Microsoft.Extensions.Logging; - -using Moq; - -using Serilog; - -using Witsml; - -using WitsmlExplorer.Api.Jobs; -using WitsmlExplorer.Api.Jobs.Common; -using WitsmlExplorer.Api.Services; -using WitsmlExplorer.Api.Workers; - -using Xunit; - -namespace WitsmlExplorer.Api.Tests.Workers -{ - public class RenameMnemonicWorkerTests - { - private readonly RenameMnemonicWorker _worker; - private const string WellUid = "wellUid"; - private const string WellboreUid = "wellboreUid"; - private const string LogUid = "logUid"; - - public RenameMnemonicWorkerTests() - { - Mock witsmlClient = new(); - Mock witsmlClientProvider = new(); - witsmlClientProvider.Setup(provider => provider.GetClient()).Returns(witsmlClient.Object); - ILoggerFactory loggerFactory = new LoggerFactory(); - loggerFactory.AddSerilog(Log.Logger); - ILogger logger = loggerFactory.CreateLogger(); - _worker = new RenameMnemonicWorker(logger, witsmlClientProvider.Object); - } - - [Fact] - public async void MnemonicEmpty_RenameMnemonic_ShouldThrowException() - { - RenameMnemonicJob job = CreateJobTemplate() with - { - Mnemonic = "", - NewMnemonic = "Felgen" - }; - - Task ExecuteWorker() - { - return _worker.Execute(job); - } - - await Assert.ThrowsAsync(ExecuteWorker); - } - - [Fact] - public async void NewMnemonicNull_RenameMnemonic_ShouldThrowException() - { - RenameMnemonicJob job = CreateJobTemplate() with - { - Mnemonic = "Reodor", - NewMnemonic = null - }; - - Task ExecuteWorker() - { - return _worker.Execute(job); - } - - await Assert.ThrowsAsync(ExecuteWorker); - } - - private static RenameMnemonicJob CreateJobTemplate() - { - return new RenameMnemonicJob - { - LogReference = new ObjectReference - { - WellUid = WellUid, - WellboreUid = WellboreUid, - Uid = LogUid - } - }; - } - } -} diff --git a/Tests/WitsmlExplorer.IntegrationTests/Api/Workers/RenameMnemonicWorkerTests.cs b/Tests/WitsmlExplorer.IntegrationTests/Api/Workers/RenameMnemonicWorkerTests.cs index b323b7084..ed9918d43 100644 --- a/Tests/WitsmlExplorer.IntegrationTests/Api/Workers/RenameMnemonicWorkerTests.cs +++ b/Tests/WitsmlExplorer.IntegrationTests/Api/Workers/RenameMnemonicWorkerTests.cs @@ -8,6 +8,7 @@ using WitsmlExplorer.Api.Models; using WitsmlExplorer.Api.Services; using WitsmlExplorer.Api.Workers; +using WitsmlExplorer.Api.Workers.Modify; using Xunit; @@ -15,7 +16,7 @@ namespace WitsmlExplorer.IntegrationTests.Api.Workers { public class RenameMnemonicWorkerTests { - private readonly RenameMnemonicWorker _worker; + private readonly ModifyLogCurveInfoWorker _worker; private const string WellUid = ""; private const string WellboreUid = ""; private const string LogUid = ""; @@ -26,17 +27,16 @@ public RenameMnemonicWorkerTests() WitsmlClientProvider witsmlClientProvider = new(configuration); ILoggerFactory loggerFactory = new LoggerFactory(); loggerFactory.AddSerilog(Log.Logger); - ILogger logger = loggerFactory.CreateLogger(); - _worker = new RenameMnemonicWorker(logger, witsmlClientProvider); + ILogger logger = loggerFactory.CreateLogger(); + _worker = new ModifyLogCurveInfoWorker(logger, witsmlClientProvider); } [Fact(Skip = "Should only be run manually")] public async void ValidInputRenameMnemonicShouldReturnSuccess() { - RenameMnemonicJob job = CreateJobTemplate() with + ModifyLogCurveInfoJob job = CreateJobTemplate() with { - Mnemonic = "", - NewMnemonic = "" + LogCurveInfo = new LogCurveInfo() { Mnemonic = ""} }; (WorkerResult result, RefreshAction _) = await _worker.Execute(job); @@ -44,9 +44,9 @@ public async void ValidInputRenameMnemonicShouldReturnSuccess() Assert.True(result.IsSuccess, result.Reason); } - private static RenameMnemonicJob CreateJobTemplate() + private static ModifyLogCurveInfoJob CreateJobTemplate() { - return new RenameMnemonicJob + return new ModifyLogCurveInfoJob { LogReference = new ObjectReference { From 62b3250ea338eb5851f819333e3f811dd2fcbf83 Mon Sep 17 00:00:00 2001 From: jaroslavbliznak Date: Thu, 23 Nov 2023 09:34:56 +0100 Subject: [PATCH 2/2] FIX-2009 Fix IndexCurve, renaming, constants --- Src/Witsml/CommonConstants.cs | 1 - .../Modify/ModifyLogCurveInfoWorker.cs | 14 +++++++--- .../Modals/LogCurveInfoPropertiesModal.tsx | 26 ++++++++++++++++--- .../Workers/ModifyLogCurveInfoWorkerTests.cs | 8 +++--- ...ts.cs => ModifyLogCurveInfoWorkerTests.cs} | 19 +++----------- 5 files changed, 40 insertions(+), 28 deletions(-) rename Tests/WitsmlExplorer.IntegrationTests/Api/Workers/{RenameMnemonicWorkerTests.cs => ModifyLogCurveInfoWorkerTests.cs} (76%) diff --git a/Src/Witsml/CommonConstants.cs b/Src/Witsml/CommonConstants.cs index 6b9e59017..7613e5ff7 100644 --- a/Src/Witsml/CommonConstants.cs +++ b/Src/Witsml/CommonConstants.cs @@ -8,5 +8,4 @@ public static class CommonConstants public const int DefaultNumberOfRoundedPlaces = 3; public const string DataSeparator = ","; public const string NewLine = "\n"; - public const string DefaultUnit = "unitless"; } diff --git a/Src/WitsmlExplorer.Api/Workers/Modify/ModifyLogCurveInfoWorker.cs b/Src/WitsmlExplorer.Api/Workers/Modify/ModifyLogCurveInfoWorker.cs index 8815fb19f..f0a54f253 100644 --- a/Src/WitsmlExplorer.Api/Workers/Modify/ModifyLogCurveInfoWorker.cs +++ b/Src/WitsmlExplorer.Api/Workers/Modify/ModifyLogCurveInfoWorker.cs @@ -53,6 +53,12 @@ public ModifyLogCurveInfoWorker(ILogger logger, IWitsmlCl } var originalLogCurveInfoMnemonic = originalLogCurveInfo.Mnemonic; + var isLogCurveInfoMnemonicUpdated = originalLogCurveInfoMnemonic != job.LogCurveInfo.Mnemonic; + if (logHeader.IndexCurve.Value == originalLogCurveInfoMnemonic && isLogCurveInfoMnemonicUpdated) + { + throw new InvalidOperationException($"IndexCurve Mnemonic: {originalLogCurveInfoMnemonic} cannot be modified."); + } + WitsmlLogs modifyLogCurveInfoQuery = GetModifyLogCurveInfoQuery(job, originalLogCurveInfo); QueryResult modifyLogCurveInfoResult = await client.UpdateInStoreAsync(modifyLogCurveInfoQuery); if (modifyLogCurveInfoResult.IsSuccessful) @@ -66,11 +72,11 @@ public ModifyLogCurveInfoWorker(ILogger logger, IWitsmlCl return (new WorkerResult(GetTargetWitsmlClientOrThrow().GetServerHostname(), false, errorMessage, modifyLogCurveInfoResult.Reason), null); } - if (originalLogCurveInfoMnemonic != job.LogCurveInfo.Mnemonic) + if (isLogCurveInfoMnemonicUpdated) { var originalMnemonics = GetMnemonics(logHeader, originalLogCurveInfoMnemonic); - var updatedMnemonics = string.Join(",", GetMnemonics(logHeader, job.LogCurveInfo.Mnemonic)); - var updatedUnits = string.Join(",", GetUnits(logHeader, job.LogCurveInfo.Unit)); + var updatedMnemonics = string.Join(CommonConstants.DataSeparator, GetMnemonics(logHeader, job.LogCurveInfo.Mnemonic)); + var updatedUnits = string.Join(CommonConstants.DataSeparator, GetUnits(logHeader, job.LogCurveInfo.Unit)); WitsmlLog modifyLogData = GetModifyLogDataQuery(job, updatedMnemonics, updatedUnits); await using LogDataReader logDataReader = new(client, logHeader, originalMnemonics, Logger); @@ -172,7 +178,7 @@ private static void Verify(ModifyLogCurveInfoJob job) private static List GetUnits(WitsmlLog log, string newUnit) { - var indexCurveUnit = log.LogCurveInfo.FirstOrDefault(x => x.Mnemonic == log.IndexCurve.Value)?.Unit ?? CommonConstants.DefaultUnit; + var indexCurveUnit = log.LogCurveInfo.FirstOrDefault(x => x.Mnemonic == log.IndexCurve.Value)?.Unit; return new List { indexCurveUnit, newUnit }; } diff --git a/Src/WitsmlExplorer.Frontend/components/Modals/LogCurveInfoPropertiesModal.tsx b/Src/WitsmlExplorer.Frontend/components/Modals/LogCurveInfoPropertiesModal.tsx index 5f59c3332..76dd4875f 100644 --- a/Src/WitsmlExplorer.Frontend/components/Modals/LogCurveInfoPropertiesModal.tsx +++ b/Src/WitsmlExplorer.Frontend/components/Modals/LogCurveInfoPropertiesModal.tsx @@ -20,6 +20,7 @@ const LogCurveInfoPropertiesModal = (props: LogCurveInfoPropertiesModalProps): R const { logCurveInfo, dispatchOperation, selectedLog } = props; const [editableLogCurveInfo, setEditableLogCurveInfo] = useState(null); const [isLoading, setIsLoading] = useState(false); + const isIndexCurve = logCurveInfo?.mnemonic === selectedLog?.indexCurve; const onSubmit = async () => { setIsLoading(true); @@ -51,22 +52,39 @@ const LogCurveInfoPropertiesModal = (props: LogCurveInfoPropertiesModalProps): R error={editableLogCurveInfo.mnemonic.length === 0} helperText={editableLogCurveInfo.mnemonic.length === 0 ? "A logCurveInfo mnemonic cannot be empty. Size must be 1 to 64 characters." : ""} fullWidth + disabled={isIndexCurve} inputProps={{ minLength: 1, maxLength: 64 }} - onChange={(e) => setEditableLogCurveInfo({ ...editableLogCurveInfo, mnemonic: e.target.value })} + onChange={(e) => + setEditableLogCurveInfo({ + ...editableLogCurveInfo, + mnemonic: e.target.value + }) + } /> setEditableLogCurveInfo({ ...editableLogCurveInfo, unit: e.target.value })} + helperText={editableLogCurveInfo.unit == null || editableLogCurveInfo.unit.length === 0 ? "A unit cannot be empty. Size must be 1 to 64 characters." : ""} + inputProps={{ minLength: 1, maxLength: 64 }} + onChange={(e) => + setEditableLogCurveInfo({ + ...editableLogCurveInfo, + unit: e.target.value + }) + } /> setEditableLogCurveInfo({ ...editableLogCurveInfo, curveDescription: e.target.value })} + onChange={(e) => + setEditableLogCurveInfo({ + ...editableLogCurveInfo, + curveDescription: e.target.value + }) + } /> diff --git a/Tests/WitsmlExplorer.Api.Tests/Workers/ModifyLogCurveInfoWorkerTests.cs b/Tests/WitsmlExplorer.Api.Tests/Workers/ModifyLogCurveInfoWorkerTests.cs index 2f0bdc44f..85adf4550 100644 --- a/Tests/WitsmlExplorer.Api.Tests/Workers/ModifyLogCurveInfoWorkerTests.cs +++ b/Tests/WitsmlExplorer.Api.Tests/Workers/ModifyLogCurveInfoWorkerTests.cs @@ -96,9 +96,9 @@ public async void ModifyLogCurveInfoProperties_Execute_ValidResults() await _worker.Execute(job); Assert.Single(updatedLogs); - Assert.Equal(expectedMnemonic, updatedLogs.First().Logs.First().LogCurveInfo.First().Mnemonic); - Assert.Equal(expectedUnit, updatedLogs.First().Logs.First().LogCurveInfo.First().Unit); - Assert.Equal(expectedCurveDescription, updatedLogs.First().Logs.First().LogCurveInfo.First().CurveDescription); + Assert.Equal(expectedMnemonic, updatedLogs.FirstOrDefault()?.Logs.FirstOrDefault()?.LogCurveInfo.FirstOrDefault()?.Mnemonic); + Assert.Equal(expectedUnit, updatedLogs.FirstOrDefault()?.Logs.FirstOrDefault()?.LogCurveInfo.FirstOrDefault()?.Unit); + Assert.Equal(expectedCurveDescription, updatedLogs.FirstOrDefault()?.Logs.FirstOrDefault()?.LogCurveInfo.FirstOrDefault()?.CurveDescription); } [Fact] @@ -129,7 +129,7 @@ public async void RenameMnemonic_Execute_ValidResults() await _worker.Execute(job); Assert.Single(updatedLogs); - Assert.Equal(expectedMnemonic, updatedLogs.First().Logs.First().LogCurveInfo.First().Mnemonic); + Assert.Equal(expectedMnemonic, updatedLogs.FirstOrDefault()?.Logs.FirstOrDefault()?.LogCurveInfo.FirstOrDefault()?.Mnemonic); } private WitsmlLogs GetTestWitsmlLogs() diff --git a/Tests/WitsmlExplorer.IntegrationTests/Api/Workers/RenameMnemonicWorkerTests.cs b/Tests/WitsmlExplorer.IntegrationTests/Api/Workers/ModifyLogCurveInfoWorkerTests.cs similarity index 76% rename from Tests/WitsmlExplorer.IntegrationTests/Api/Workers/RenameMnemonicWorkerTests.cs rename to Tests/WitsmlExplorer.IntegrationTests/Api/Workers/ModifyLogCurveInfoWorkerTests.cs index ed9918d43..a9bdfb9c6 100644 --- a/Tests/WitsmlExplorer.IntegrationTests/Api/Workers/RenameMnemonicWorkerTests.cs +++ b/Tests/WitsmlExplorer.IntegrationTests/Api/Workers/ModifyLogCurveInfoWorkerTests.cs @@ -14,14 +14,14 @@ namespace WitsmlExplorer.IntegrationTests.Api.Workers { - public class RenameMnemonicWorkerTests + public class ModifyLogCurveInfoWorkerTests { private readonly ModifyLogCurveInfoWorker _worker; private const string WellUid = ""; private const string WellboreUid = ""; private const string LogUid = ""; - public RenameMnemonicWorkerTests() + public ModifyLogCurveInfoWorkerTests() { IConfiguration configuration = ConfigurationReader.GetConfig(); WitsmlClientProvider witsmlClientProvider = new(configuration); @@ -34,10 +34,7 @@ public RenameMnemonicWorkerTests() [Fact(Skip = "Should only be run manually")] public async void ValidInputRenameMnemonicShouldReturnSuccess() { - ModifyLogCurveInfoJob job = CreateJobTemplate() with - { - LogCurveInfo = new LogCurveInfo() { Mnemonic = ""} - }; + ModifyLogCurveInfoJob job = CreateJobTemplate() with { LogCurveInfo = new LogCurveInfo() { Mnemonic = "" } }; (WorkerResult result, RefreshAction _) = await _worker.Execute(job); @@ -46,15 +43,7 @@ public async void ValidInputRenameMnemonicShouldReturnSuccess() private static ModifyLogCurveInfoJob CreateJobTemplate() { - return new ModifyLogCurveInfoJob - { - LogReference = new ObjectReference - { - WellUid = WellUid, - WellboreUid = WellboreUid, - Uid = LogUid - } - }; + return new ModifyLogCurveInfoJob { LogReference = new ObjectReference { WellUid = WellUid, WellboreUid = WellboreUid, Uid = LogUid } }; } } }