Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions src/DynamoCoreWpf/Views/Core/DynamoView.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3403,12 +3403,21 @@ public void Dispose()

internal bool DisableExtensionWhenNoNetworkMode(string extensionId, string extensionName, string action)
{
if (dynamoViewModel.Model.NoNetworkMode &&
(string.Equals(extensionId, AutodeskAssistantExtensionId, StringComparison.OrdinalIgnoreCase) ||
string.Equals(extensionId, McpViewExtensionId, StringComparison.OrdinalIgnoreCase)))
if (!string.Equals(extensionId, AutodeskAssistantExtensionId, StringComparison.OrdinalIgnoreCase) &&
!string.Equals(extensionId, McpViewExtensionId, StringComparison.OrdinalIgnoreCase))
{
return false;
}

if (dynamoViewModel.Model.NoNetworkMode)
{
Log($"Package/Extension {extensionName} not {action} because NoNetworkMode flag is active");
return true;
}

if (!dynamoViewModel.Model.AuthenticationManager.IsIDSDKInitialized())
{
Log($"Package/Extension {extensionName} not {action} because IDSDK is not initialized");
return true;
}

Expand Down
101 changes: 101 additions & 0 deletions test/DynamoCoreWpfTests/DynamoViewNoNetworkModeTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Dynamo.Controls;
using Dynamo.Core;
using Dynamo.Models;
using Dynamo.ViewModels;
using NUnit.Framework;
Expand Down Expand Up @@ -100,5 +101,105 @@ public void UnrecognizedExtensionIsNotDisabledWhenNoNetworkModeIsEnabled()

Assert.IsFalse(shouldDisable);
}

[Test]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These tests assume the IDSDK is unavailable, but on a test machine or a dev machine, it might be installed and fail.

Add Assume.That(!...IsIDSDKInitialized()) or Assert.Ignore

public void AutodeskAssistantExtensionIsDisabledWhenIDSDKIsNotInitialized()
{
var pathResolver = new TestPathResolver();
DynamoModel modelWithUninitializedIDSDK = null;
DynamoViewModel viewModelWithUninitializedIDSDK = null;
DynamoView viewWithUninitializedIDSDK = null;

try
{
// IDSDKManager.IsIDSDKInitialized returns false when the native IDSDK library
// is not installed (e.g. test environments, VMs without Autodesk Identity).
modelWithUninitializedIDSDK = DynamoModel.Start(new DynamoModel.DefaultStartConfiguration()
{
PathResolver = pathResolver,
StartInTestMode = true,
GeometryFactoryPath = preloader.GeometryFactoryPath,
ProcessMode = Dynamo.Scheduler.TaskProcessMode.Synchronous,
NoNetworkMode = false,
AuthProvider = new IDSDKManager()
});

Comment on lines +128 to +129
viewModelWithUninitializedIDSDK = DynamoViewModel.Start(new DynamoViewModel.StartConfiguration()
{
DynamoModel = modelWithUninitializedIDSDK
});

viewWithUninitializedIDSDK = new DynamoView(viewModelWithUninitializedIDSDK);

var shouldDisable = viewWithUninitializedIDSDK.DisableExtensionWhenNoNetworkMode(
DynamoView.AutodeskAssistantExtensionId,
"Autodesk Assistant",
"added");

Assert.IsTrue(shouldDisable);
}
finally
{
if (viewWithUninitializedIDSDK != null && viewWithUninitializedIDSDK.IsLoaded)
{
viewWithUninitializedIDSDK.Close();
}

if (viewModelWithUninitializedIDSDK != null)
{
var shutdownParams = new DynamoViewModel.ShutdownParams(shutdownHost: false, allowCancellation: false);
viewModelWithUninitializedIDSDK.PerformShutdownSequence(shutdownParams);
}
}
}

[Test]
public void McpViewExtensionIsDisabledWhenIDSDKIsNotInitialized()
{
var pathResolver = new TestPathResolver();
DynamoModel modelWithUninitializedIDSDK = null;
DynamoViewModel viewModelWithUninitializedIDSDK = null;
DynamoView viewWithUninitializedIDSDK = null;

try
{
modelWithUninitializedIDSDK = DynamoModel.Start(new DynamoModel.DefaultStartConfiguration()
{
PathResolver = pathResolver,
StartInTestMode = true,
GeometryFactoryPath = preloader.GeometryFactoryPath,
ProcessMode = Dynamo.Scheduler.TaskProcessMode.Synchronous,
NoNetworkMode = false,
AuthProvider = new IDSDKManager()
});

viewModelWithUninitializedIDSDK = DynamoViewModel.Start(new DynamoViewModel.StartConfiguration()
{
DynamoModel = modelWithUninitializedIDSDK
});

viewWithUninitializedIDSDK = new DynamoView(viewModelWithUninitializedIDSDK);

var shouldDisable = viewWithUninitializedIDSDK.DisableExtensionWhenNoNetworkMode(
DynamoView.McpViewExtensionId,
"Dynamo MCP View Extension",
"added");

Assert.IsTrue(shouldDisable);
}
finally
{
if (viewWithUninitializedIDSDK != null && viewWithUninitializedIDSDK.IsLoaded)
{
viewWithUninitializedIDSDK.Close();
}

if (viewModelWithUninitializedIDSDK != null)
{
var shutdownParams = new DynamoViewModel.ShutdownParams(shutdownHost: false, allowCancellation: false);
viewModelWithUninitializedIDSDK.PerformShutdownSequence(shutdownParams);
}
}
}
}
}
Loading