|
1 | | -using Autodesk.DesignScript.Geometry; |
2 | | -using CoreNodeModels.Input; |
| 1 | +using Autodesk.Revit.DB; |
| 2 | +using Dynamo.Graph.Nodes.ZeroTouch; |
3 | 3 | using NUnit.Framework; |
4 | 4 | using RevitServices.Persistence; |
5 | 5 | using RevitTestServices; |
6 | 6 | using RTF.Framework; |
7 | 7 | using System.IO; |
8 | | -using Dynamo.Tests; |
| 8 | +using System.Linq; |
| 9 | +using Point = Autodesk.DesignScript.Geometry.Point; |
9 | 10 |
|
10 | 11 | namespace RevitSystemTests |
11 | 12 | { |
@@ -58,5 +59,99 @@ public void CanSetGetLocation() |
58 | 59 | Assert.AreEqual(x, location.X, Tolerance); |
59 | 60 | Assert.AreEqual(y, location.Y, Tolerance); |
60 | 61 | } |
| 62 | + |
| 63 | + [Test] |
| 64 | + [TestModel(@".\Revision2025.rvt")] |
| 65 | + public void CreateAreaSchedule() |
| 66 | + { |
| 67 | + string samplePath = Path.Combine(workingDirectory, @".\Script\CreateAreaSchedule.dyn"); |
| 68 | + string testPath = Path.GetFullPath(samplePath); |
| 69 | + |
| 70 | + ViewModel.OpenCommand.Execute(testPath); |
| 71 | + RunCurrentModel(); |
| 72 | + |
| 73 | + var createAreaSchedule = GetPreviewValue("de0f82ea57aa463da89f97f52f7603b9"); |
| 74 | + Assert.AreEqual("ScheduleView(Name = AreaSchedule )", createAreaSchedule.ToString()); |
| 75 | + |
| 76 | + var schedules = new FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument) |
| 77 | + .OfClass(typeof(ViewSchedule)) |
| 78 | + .Cast<ViewSchedule>() |
| 79 | + .ToList(); |
| 80 | + |
| 81 | + //Verify that at least one schedule is named "AreaSchedule" |
| 82 | + Assert.IsTrue(schedules.Any(s => s.Name == "AreaSchedule"), "No AreaSchedule found in the document."); |
| 83 | + } |
| 84 | + |
| 85 | + [Test] |
| 86 | + [TestModel(@".\Revision2025.rvt")] |
| 87 | + public void FilterScheduleView() |
| 88 | + { |
| 89 | + string samplePath = Path.Combine(workingDirectory, @".\Script\FilterScheduleView.dyn"); |
| 90 | + string testPath = Path.GetFullPath(samplePath); |
| 91 | + ViewModel.OpenCommand.Execute(testPath); |
| 92 | + |
| 93 | + var selectFamilyInstance = AllNodes |
| 94 | + .OfType<Dynamo.Nodes.DSModelFamilyInstanceSelection>() |
| 95 | + .FirstOrDefault(n => n.Name == "Select Family Instance"); |
| 96 | + |
| 97 | + RunCurrentModel(); |
| 98 | + |
| 99 | + //The id of the family isn't preserve in the script so we should reselect the element |
| 100 | + var selection = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument.Selection; |
| 101 | + var selectedElementId = selection.GetElementIds() |
| 102 | + .Select(id => id.Value.ToString()) |
| 103 | + .ToList(); |
| 104 | + var familyInstances = selectedElementId |
| 105 | + .Select(id => DocumentManager.Instance.CurrentDBDocument.GetElement(new ElementId(int.Parse(id))) as FamilyInstance) |
| 106 | + .Where(instance => instance != null) |
| 107 | + .ToList(); |
| 108 | + |
| 109 | + // Update the selection with the converted list |
| 110 | + selectFamilyInstance.UpdateSelection(familyInstances); |
| 111 | + |
| 112 | + RunCurrentModel(); |
| 113 | + |
| 114 | + //Verify that the schedule was created |
| 115 | + var schedules = new FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument) |
| 116 | + .OfClass(typeof(ViewSchedule)) |
| 117 | + .Cast<ViewSchedule>() |
| 118 | + .ToList(); |
| 119 | + Assert.IsTrue(schedules.Any(s => s.Name == "DoorSchedule"), "No DoorSchedule found in the document."); |
| 120 | + |
| 121 | + //Verify the first part of the script |
| 122 | + var scheduleViewFields = GetFlattenedPreviewValues("065abc4dcee141f68e153d4e465be579"); |
| 123 | + Assert.AreEqual(207, scheduleViewFields.Count); |
| 124 | + |
| 125 | + var addFilters = GetPreviewValue("cdf84e35ad9f4b1b9d0177a8e2adb2db"); |
| 126 | + Assert.AreEqual("ScheduleView(Name = DoorSchedule )", addFilters.ToString()); |
| 127 | + |
| 128 | + var exportSchedule = GetFlattenedPreviewValues("3dde472b5310413f8820a93a51924fa2"); |
| 129 | + Assert.AreEqual(211, exportSchedule.Count); |
| 130 | + Assert.IsNotNull(exportSchedule[150]); |
| 131 | + |
| 132 | + //Asserts for Filters |
| 133 | + var scheduleFilterFileId = GetPreviewValue("50ad7eff68f84453b99661a6d23a08eb"); |
| 134 | + Assert.AreEqual(2, scheduleFilterFileId); |
| 135 | + |
| 136 | + var scheduleFilterType = GetPreviewValue("6b08ca1903bd4d2bac1194d55a5068a5"); |
| 137 | + Assert.AreEqual("Contains", scheduleFilterType); |
| 138 | + |
| 139 | + var scheduleFilterValue = GetPreviewValue("46460c2f971f42df9bb88a4748b5d069"); |
| 140 | + Assert.AreEqual("Doors_ExtDbl_Flush", scheduleFilterValue); |
| 141 | + |
| 142 | + var scheduleFilters = GetFlattenedPreviewValues("e238cfc088f441e79f5669ee99632824"); |
| 143 | + Assert.IsNotNull(scheduleFilters[0]); |
| 144 | + Assert.IsNotEmpty(scheduleFilters[0].ToString()); |
| 145 | + |
| 146 | + //Connect the output of ScheduleView.AddFilters node to the input of ScheduleView.ClearAllFilters node |
| 147 | + var addFiltersNode = GetNode<DSFunction>("cdf84e35-ad9f-4b1b-9d01-77a8e2adb2db"); |
| 148 | + var clearFiltersNode = GetNode<DSFunction>("95e2e9a7-0363-4bac-b7c0-a5fdd5769e27"); |
| 149 | + |
| 150 | + MakeConnector(addFiltersNode, clearFiltersNode, 0, 0); |
| 151 | + RunCurrentModel(); |
| 152 | + |
| 153 | + var clearFilters = GetPreviewValue("95e2e9a7-0363-4bac-b7c0-a5fdd5769e27"); |
| 154 | + Assert.AreEqual("ScheduleView(Name = DoorSchedule )", clearFilters.ToString()); |
| 155 | + } |
61 | 156 | } |
62 | 157 | } |
0 commit comments