#14434 Guard against missing perforation interval in templateUpdated

This commit is contained in:
Magne Sjaastad
2026-07-31 16:38:33 +02:00
parent af2c5d429c
commit 134befead4
3 changed files with 45 additions and 2 deletions
@@ -549,8 +549,11 @@ void RimWellPathValve::templateUpdated()
{
applyValveLabelAndIcon();
auto perforationInterval = firstAncestorOrThisOfType<RimPerforationInterval>();
perforationInterval->updateAllReferringTracks();
// A valve can also be a stand-alone valve or a tie-in outlet valve, and then has no perforation interval
if ( auto perforationInterval = firstAncestorOrThisOfType<RimPerforationInterval>() )
{
perforationInterval->updateAllReferringTracks();
}
RimProject* proj = RimProject::current();
proj->reloadCompletionTypeResultsInAllViews();
@@ -74,6 +74,7 @@ set(SOURCE_UNITTEST_FILES
${CMAKE_CURRENT_LIST_DIR}/Intersect-Test.cpp
${CMAKE_CURRENT_LIST_DIR}/RifPerforationIntervalReader-Test.cpp
${CMAKE_CURRENT_LIST_DIR}/RimWellPathCompletions-Test.cpp
${CMAKE_CURRENT_LIST_DIR}/RimWellPathValve-Test.cpp
${CMAKE_CURRENT_LIST_DIR}/RimDataFilterCollection-Test.cpp
${CMAKE_CURRENT_LIST_DIR}/RimSummaryCaseCollection-Test.cpp
${CMAKE_CURRENT_LIST_DIR}/RifActiveCellsReader-Test.cpp
@@ -0,0 +1,39 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2026 Equinor ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "gtest/gtest.h"
#include "RimValveCollection.h"
#include "RimWellPath.h"
#include "RimWellPathValve.h"
//--------------------------------------------------------------------------------------------------
/// A stand-alone valve has no perforation interval ancestor, and must not crash on template update
//--------------------------------------------------------------------------------------------------
TEST( RimWellPathValveTest, TemplateUpdatedWithoutPerforationInterval )
{
RimWellPath wellPath;
RimValveCollection* valveCollection = wellPath.valveCollection();
ASSERT_TRUE( valveCollection != nullptr );
RimWellPathValve* valve = valveCollection->addIcvValve( 100.0 );
ASSERT_TRUE( valve != nullptr );
valve->templateUpdated();
}