From 62b3250ea338eb5851f819333e3f811dd2fcbf83 Mon Sep 17 00:00:00 2001 From: jaroslavbliznak Date: Thu, 23 Nov 2023 09:34:56 +0100 Subject: [PATCH] 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 } }; } } }