Created Tests

This commit is contained in:
Mike Phares 2024-10-13 10:41:24 -07:00
parent b6d8d4c52f
commit 0ee1846c72
6 changed files with 424 additions and 483 deletions

462
.vscode/.json vendored
View File

@ -1,312 +1,154 @@
[
{
"id": "403675d4-631e-40bb-900e-fae36d9c9cdd",
"deviceAssetId": "449501900719.jpg",
"ownerId": "fc9fd5a1-d1b3-4080-a21c-daf9b1c24593",
"deviceId": "Library Import",
"type": "IMAGE",
"originalPath": "/var/snap/immich-distribution/pictures/71/449501900719.jpg",
"previewPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/40/36/403675d4-631e-40bb-900e-fae36d9c9cdd-preview.jpeg",
"fileCreatedAt": "2016-12-02T02:34:23-07:00",
"fileModifiedAt": "2016-12-02T02:34:22-07:00",
"isFavorite": false,
"duration": null,
"thumbnailPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/40/36/403675d4-631e-40bb-900e-fae36d9c9cdd-thumbnail.webp",
"encodedVideoPath": "",
"checksum": "\\x28b46dbf4864b92f18800815cf8145c38d037e92",
"isVisible": true,
"livePhotoVideoId": null,
"updatedAt": "2024-04-25T13:13:20.074314-07:00",
"createdAt": "2024-04-25T10:14:24.253144-07:00",
"isArchived": false,
"originalFileName": "449501900719.jpg",
"sidecarPath": null,
"isReadOnly": true,
"thumbhash": "\\xe5a9090d8257787870788886886877776870760aa9",
"isOffline": false,
"libraryId": "af11ab7c-0782-4b7a-ba8e-fe68cf9a718d",
"isExternal": true,
"deletedAt": null,
"localDateTime": "2016-12-01T19:34:23-07:00",
"stackId": null
},
{
"id": "11ceb05f-8c94-46cd-9a7e-1c06be5a18b8",
"deviceAssetId": "015516300831.jpg",
"ownerId": "fc9fd5a1-d1b3-4080-a21c-daf9b1c24593",
"deviceId": "Library Import",
"type": "IMAGE",
"originalPath": "/var/snap/immich-distribution/pictures/83/015516300831.jpg",
"previewPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/11/ce/11ceb05f-8c94-46cd-9a7e-1c06be5a18b8-preview.jpeg",
"fileCreatedAt": "2014-05-03T14:44:20-07:00",
"fileModifiedAt": "2014-11-17T11:18:58-07:00",
"isFavorite": false,
"duration": null,
"thumbnailPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/11/ce/11ceb05f-8c94-46cd-9a7e-1c06be5a18b8-thumbnail.webp",
"encodedVideoPath": "",
"checksum": "\\x5b976715bab319b3bdc69d5f337701a062494e0b",
"isVisible": true,
"livePhotoVideoId": null,
"updatedAt": "2024-04-25T13:07:55.048725-07:00",
"createdAt": "2024-04-25T10:14:12.923101-07:00",
"isArchived": false,
"originalFileName": "015516300831.jpg",
"sidecarPath": null,
"isReadOnly": true,
"thumbhash": "\\x5a08120c00771777f87778979877597fbef365",
"isOffline": false,
"libraryId": "af11ab7c-0782-4b7a-ba8e-fe68cf9a718d",
"isExternal": true,
"deletedAt": null,
"localDateTime": "2014-05-03T14:44:20-07:00",
"stackId": null
},
{
"id": "e8e94a75-2b0c-48f6-b26a-76f5cbe46233",
"deviceAssetId": "985177500821.jpg",
"ownerId": "fc9fd5a1-d1b3-4080-a21c-daf9b1c24593",
"deviceId": "Library Import",
"type": "IMAGE",
"originalPath": "/var/snap/immich-distribution/pictures/82/985177500821.jpg",
"previewPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/e8/e9/e8e94a75-2b0c-48f6-b26a-76f5cbe46233-preview.jpeg",
"fileCreatedAt": "2004-04-28T20:31:40-07:00",
"fileModifiedAt": "2018-05-16T21:41:26.093-07:00",
"isFavorite": false,
"duration": null,
"thumbnailPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/e8/e9/e8e94a75-2b0c-48f6-b26a-76f5cbe46233-thumbnail.webp",
"encodedVideoPath": "",
"checksum": "\\x176b222fa88bc72aaf81031f3b7f73644b178de4",
"isVisible": true,
"livePhotoVideoId": null,
"updatedAt": "2024-04-25T13:07:55.667409-07:00",
"createdAt": "2024-04-25T10:14:12.945414-07:00",
"isArchived": false,
"originalFileName": "985177500821.jpg",
"sidecarPath": null,
"isReadOnly": true,
"thumbhash": "\\xdf07121d0687868f87378788887877887780670789",
"isOffline": false,
"libraryId": "af11ab7c-0782-4b7a-ba8e-fe68cf9a718d",
"isExternal": true,
"deletedAt": null,
"localDateTime": "2004-04-28T20:31:40-07:00",
"stackId": null
},
{
"id": "4091bebd-4c26-4d30-bd3a-f2160a54b451",
"deviceAssetId": "956694610829.jpg",
"ownerId": "fc9fd5a1-d1b3-4080-a21c-daf9b1c24593",
"deviceId": "Library Import",
"type": "IMAGE",
"originalPath": "/var/snap/immich-distribution/pictures/82/956694610829.jpg",
"previewPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/40/91/4091bebd-4c26-4d30-bd3a-f2160a54b451-preview.jpeg",
"fileCreatedAt": "2010-07-05T09:10:13.2-07:00",
"fileModifiedAt": "2010-07-05T08:10:12-07:00",
"isFavorite": false,
"duration": null,
"thumbnailPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/40/91/4091bebd-4c26-4d30-bd3a-f2160a54b451-thumbnail.webp",
"encodedVideoPath": "",
"checksum": "\\xc2eb5667d6da5ead1be71c51064ea293ad413ea6",
"isVisible": true,
"livePhotoVideoId": null,
"updatedAt": "2024-04-25T13:07:56.364375-07:00",
"createdAt": "2024-04-25T10:14:12.976197-07:00",
"isArchived": false,
"originalFileName": "956694610829.jpg",
"sidecarPath": null,
"isReadOnly": true,
"thumbhash": "\\x12080a0d82668886808887867877877867807906b7",
"isOffline": false,
"libraryId": "af11ab7c-0782-4b7a-ba8e-fe68cf9a718d",
"isExternal": true,
"deletedAt": null,
"localDateTime": "2010-07-05T09:10:13.2-07:00",
"stackId": null
},
{
"id": "c7bf1944-9f71-4808-8ff9-b0f972e907b0",
"deviceAssetId": "948800300821.jpg",
"ownerId": "fc9fd5a1-d1b3-4080-a21c-daf9b1c24593",
"deviceId": "Library Import",
"type": "IMAGE",
"originalPath": "/var/snap/immich-distribution/pictures/82/948800300821.jpg",
"previewPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/c7/bf/c7bf1944-9f71-4808-8ff9-b0f972e907b0-preview.jpeg",
"fileCreatedAt": "2009-10-09T05:35:00.2-07:00",
"fileModifiedAt": "2009-10-09T04:35:00-07:00",
"isFavorite": false,
"duration": null,
"thumbnailPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/c7/bf/c7bf1944-9f71-4808-8ff9-b0f972e907b0-thumbnail.webp",
"encodedVideoPath": "",
"checksum": "\\x3c5c87ab7e442d1f7a0f2a12678c1d6be00dbc7b",
"isVisible": true,
"livePhotoVideoId": null,
"updatedAt": "2024-04-25T13:07:56.553262-07:00",
"createdAt": "2024-04-25T10:14:12.982686-07:00",
"isArchived": false,
"originalFileName": "948800300821.jpg",
"sidecarPath": null,
"isReadOnly": true,
"thumbhash": "\\x103806258e02bd47937779a478997768fd3bcb9fa4",
"isOffline": false,
"libraryId": "af11ab7c-0782-4b7a-ba8e-fe68cf9a718d",
"isExternal": true,
"deletedAt": null,
"localDateTime": "2009-10-09T05:35:00.2-07:00",
"stackId": null
},
{
"id": "4f5ea703-47e9-48c6-9366-0cc10630dac2",
"deviceAssetId": "898525300821.jpg",
"ownerId": "fc9fd5a1-d1b3-4080-a21c-daf9b1c24593",
"deviceId": "Library Import",
"type": "IMAGE",
"originalPath": "/var/snap/immich-distribution/pictures/82/898525300821.jpg",
"previewPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/4f/5e/4f5ea703-47e9-48c6-9366-0cc10630dac2-preview.jpeg",
"fileCreatedAt": "2020-12-25T08:35:04.92-07:00",
"fileModifiedAt": "2020-12-25T08:35:04-07:00",
"isFavorite": false,
"duration": null,
"thumbnailPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/4f/5e/4f5ea703-47e9-48c6-9366-0cc10630dac2-thumbnail.webp",
"encodedVideoPath": "",
"checksum": "\\xf706263e450c9a26feaeba2dd14fe0fd8f22e623",
"isVisible": true,
"livePhotoVideoId": null,
"updatedAt": "2024-04-25T13:07:58.530848-07:00",
"createdAt": "2024-04-25T10:14:13.048275-07:00",
"isArchived": false,
"originalFileName": "898525300821.jpg",
"sidecarPath": null,
"isReadOnly": true,
"thumbhash": "\\x5518060d8208976849959a99687678687f8dae48f6",
"isOffline": false,
"libraryId": "af11ab7c-0782-4b7a-ba8e-fe68cf9a718d",
"isExternal": true,
"deletedAt": null,
"localDateTime": "2020-12-25T01:35:04.92-07:00",
"stackId": null
},
{
"id": "86c813ad-2a1c-489f-8fc2-0b76a21889c0",
"deviceAssetId": "864710800829.jpg",
"ownerId": "fc9fd5a1-d1b3-4080-a21c-daf9b1c24593",
"deviceId": "Library Import",
"type": "IMAGE",
"originalPath": "/var/snap/immich-distribution/pictures/82/864710800829.jpg",
"previewPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/86/c8/86c813ad-2a1c-489f-8fc2-0b76a21889c0-preview.jpeg",
"fileCreatedAt": "2004-04-28T20:00:46-07:00",
"fileModifiedAt": "2004-04-28T19:00:46-07:00",
"isFavorite": false,
"duration": null,
"thumbnailPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/86/c8/86c813ad-2a1c-489f-8fc2-0b76a21889c0-thumbnail.webp",
"encodedVideoPath": "",
"checksum": "\\x9061edbf75f11526cef2c832ba339267509eaec4",
"isVisible": true,
"livePhotoVideoId": null,
"updatedAt": "2024-04-25T13:07:59.171233-07:00",
"createdAt": "2024-04-25T10:14:13.078169-07:00",
"isArchived": false,
"originalFileName": "864710800829.jpg",
"sidecarPath": null,
"isReadOnly": true,
"thumbhash": "\\x140812250674874f87777669788778887a93a0470a",
"isOffline": false,
"libraryId": "af11ab7c-0782-4b7a-ba8e-fe68cf9a718d",
"isExternal": true,
"deletedAt": null,
"localDateTime": "2004-04-28T20:00:46-07:00",
"stackId": null
},
{
"id": "b65121d8-4a74-4f27-9d6f-c582ffc444dc",
"deviceAssetId": "862274900829.jpg",
"ownerId": "fc9fd5a1-d1b3-4080-a21c-daf9b1c24593",
"deviceId": "Library Import",
"type": "IMAGE",
"originalPath": "/var/snap/immich-distribution/pictures/82/862274900829.jpg",
"previewPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/b6/51/b65121d8-4a74-4f27-9d6f-c582ffc444dc-preview.jpeg",
"fileCreatedAt": "2018-08-17T22:50:55.15-07:00",
"fileModifiedAt": "2022-11-03T20:25:09.161-07:00",
"isFavorite": false,
"duration": null,
"thumbnailPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/b6/51/b65121d8-4a74-4f27-9d6f-c582ffc444dc-thumbnail.webp",
"encodedVideoPath": "",
"checksum": "\\xd4f623e97acd727868fe0e191c170e449d4456a5",
"isVisible": true,
"livePhotoVideoId": null,
"updatedAt": "2024-04-25T13:07:59.640678-07:00",
"createdAt": "2024-04-25T10:14:13.087927-07:00",
"isArchived": false,
"originalFileName": "862274900829.jpg",
"sidecarPath": null,
"isReadOnly": true,
"thumbhash": "\\x99180a0d045977a077687887777678876a806b0867",
"isOffline": false,
"libraryId": "af11ab7c-0782-4b7a-ba8e-fe68cf9a718d",
"isExternal": true,
"deletedAt": null,
"localDateTime": "2018-08-17T15:50:55.15-07:00",
"stackId": null
},
{
"id": "09fa281c-b828-47f6-8fbb-a5856edb63b5",
"deviceAssetId": "840656100829.jpg",
"ownerId": "fc9fd5a1-d1b3-4080-a21c-daf9b1c24593",
"deviceId": "Library Import",
"type": "IMAGE",
"originalPath": "/var/snap/immich-distribution/pictures/82/840656100829.jpg",
"previewPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/09/fa/09fa281c-b828-47f6-8fbb-a5856edb63b5-preview.jpeg",
"fileCreatedAt": "2019-05-30T14:56:36.82-07:00",
"fileModifiedAt": "2019-05-30T14:56:36-07:00",
"isFavorite": false,
"duration": null,
"thumbnailPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/09/fa/09fa281c-b828-47f6-8fbb-a5856edb63b5-thumbnail.webp",
"encodedVideoPath": "",
"checksum": "\\xd215606441cefcc295130262bad9fed96d9ac40e",
"isVisible": true,
"livePhotoVideoId": null,
"updatedAt": "2024-04-25T13:08:00.211274-07:00",
"createdAt": "2024-04-25T10:14:13.104556-07:00",
"isArchived": false,
"originalFileName": "840656100829.jpg",
"sidecarPath": null,
"isReadOnly": true,
"thumbhash": "\\xd6070a0d826f62873c788799993a7777137f679058",
"isOffline": false,
"libraryId": "af11ab7c-0782-4b7a-ba8e-fe68cf9a718d",
"isExternal": true,
"deletedAt": null,
"localDateTime": "2019-05-30T07:56:36.82-07:00",
"stackId": null
},
{
"id": "8c239624-2bea-479d-b7fa-9f2cd5ebc9b7",
"deviceAssetId": "812813100821.jpg",
"ownerId": "fc9fd5a1-d1b3-4080-a21c-daf9b1c24593",
"deviceId": "Library Import",
"type": "IMAGE",
"originalPath": "/var/snap/immich-distribution/pictures/82/812813100821.jpg",
"previewPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/8c/23/8c239624-2bea-479d-b7fa-9f2cd5ebc9b7-preview.jpeg",
"fileCreatedAt": "2021-08-28T16:29:07.65-07:00",
"fileModifiedAt": "2021-08-28T16:29:08-07:00",
"isFavorite": false,
"duration": null,
"thumbnailPath": "/var/snap/immich-distribution/common/upload/thumbs/fc9fd5a1-d1b3-4080-a21c-daf9b1c24593/8c/23/8c239624-2bea-479d-b7fa-9f2cd5ebc9b7-thumbnail.webp",
"encodedVideoPath": "",
"checksum": "\\x25a9ffe84298f0e3e7151aaf2eb339908574c035",
"isVisible": true,
"livePhotoVideoId": null,
"updatedAt": "2024-04-25T13:08:00.918411-07:00",
"createdAt": "2024-04-25T10:14:13.134038-07:00",
"isArchived": false,
"originalFileName": "812813100821.jpg",
"sidecarPath": null,
"isReadOnly": true,
"thumbhash": "\\x21080e0d825878767f9678bf7747799612c3b0308a",
"isOffline": false,
"libraryId": "af11ab7c-0782-4b7a-ba8e-fe68cf9a718d",
"isExternal": true,
"deletedAt": null,
"localDateTime": "2021-08-28T09:29:07.65-07:00",
"stackId": null
}
{
"EndLine": 116,
"FirstLine": "private Tuple\u003Cstring, Test[], JsonElement[], List\u003CFileInfo\u003E\u003E GetExtractResult(string reportFullPath, DateTime dateTime)",
"FirstUsedLine": 87,
"Name": "GetExtractResult",
"ParameterCount": 2,
"StartLine": 107
},
{
"EndLine": 478,
"FirstLine": "private void WriteFiles(string reportFullPath, DateTime dateTime)",
"FirstUsedLine": 112,
"Name": "WriteFiles",
"ParameterCount": 2,
"StartLine": 467
},
{
"EndLine": 195,
"FirstLine": "private static ReadOnlyCollection\u003CRecord\u003E GetKeyValuePairs(ReadOnlyDictionary\u003Cint, WorkItem\u003E keyValuePairs, WorkItem workItem, List\u003Cbool\u003E nests)",
"FirstUsedLine": 132,
"Name": "GetKeyValuePairs",
"ParameterCount": 3,
"StartLine": 159
},
{
"EndLine": 158,
"FirstLine": "private static int? GetIdFromUrlIfChild(Relation relation)",
"FirstUsedLine": 173,
"Name": "GetIdFromUrlIfChild",
"ParameterCount": 1,
"StartLine": 143
},
{
"EndLine": 271,
"FirstLine": "private static void AppendLines(List\u003Cchar\u003E spaces, List\u003Cstring\u003E lines, Record record, bool condensed, bool sprintOnly)",
"FirstUsedLine": 199,
"Name": "AppendLines",
"ParameterCount": 5,
"StartLine": 257
},
{
"EndLine": 246,
"FirstLine": "private static void AppendLines(string url, List\u003Cchar\u003E spaces, List\u003Cstring\u003E lines, ReadOnlyCollection\u003CRecord\u003E records, string workItemType)",
"FirstUsedLine": 217,
"Name": "AppendLines",
"ParameterCount": 5,
"StartLine": 199
},
{
"EndLine": 198,
"FirstLine": "private static string GetClosed(WorkItem workItem) =\u003E",
"FirstUsedLine": 250,
"Name": "GetClosed",
"ParameterCount": 1,
"StartLine": 196
},
{
"EndLine": 256,
"FirstLine": "private static string GetLine(List\u003Cchar\u003E spaces, WorkItem workItem, Record record, bool condensed, bool sprintOnly)",
"FirstUsedLine": 265,
"Name": "GetLine",
"ParameterCount": 5,
"StartLine": 247
},
{
"EndLine": 435,
"FirstLine": "private static void WriteFiles(string destinationDirectory, ReadOnlyCollection\u003Cstring\u003E lines, ReadOnlyCollection\u003CWorkItem\u003E workItems, string fileName)",
"FirstUsedLine": 272,
"Name": "WriteFiles",
"ParameterCount": 4,
"StartLine": 417
},
{
"EndLine": 445,
"FirstLine": "private static ReadOnlyDictionary\u003Cint, Record\u003E GetWorkItems(ReadOnlyCollection\u003CWorkItem\u003E workItems)",
"FirstUsedLine": 277,
"Name": "GetWorkItems",
"ParameterCount": 1,
"StartLine": 436
},
{
"EndLine": 457,
"FirstLine": "private static void WriteFileStructure(string destinationDirectory, ReadOnlyDictionary\u003Cint, Record\u003E keyValuePairs)",
"FirstUsedLine": 278,
"Name": "WriteFileStructure",
"ParameterCount": 2,
"StartLine": 446
},
{
"EndLine": 466,
"FirstLine": "private static void WriteFiles(string destinationDirectory, ReadOnlyCollection\u003CRecord\u003E records, string fileName)",
"FirstUsedLine": 284,
"Name": "WriteFiles",
"ParameterCount": 3,
"StartLine": 458
},
{
"EndLine": 335,
"FirstLine": "private static void WriteFiles(FileConnectorConfiguration fileConnectorConfiguration, string url, ReadOnlyCollection\u003Cstring\u003E workItemTypes, ReadOnlyCollection\u003CWorkItem\u003E workItems)",
"FirstUsedLine": 292,
"Name": "WriteFiles",
"ParameterCount": 4,
"StartLine": 272
},
{
"EndLine": 346,
"FirstLine": "private static void FilterChildren(ReadOnlyCollection\u003Cstring\u003E workItemTypes, Record record, List\u003CWorkItem\u003E results)",
"FirstUsedLine": 343,
"Name": "FilterChildren",
"ParameterCount": 3,
"StartLine": 336
},
{
"EndLine": 389,
"FirstLine": "private static ReadOnlyCollection\u003Cstring\u003E GetChildrenDirectories(ReadOnlyDictionary\u003Cint, Record\u003E keyValuePairs, List\u003Cbool\u003E nests, string parentDirectory, Record record)",
"FirstUsedLine": 384,
"Name": "GetChildrenDirectories",
"ParameterCount": 4,
"StartLine": 365
},
{
"EndLine": 142,
"FirstLine": "private static ReadOnlyDictionary\u003Cint, Record\u003E GetKeyValuePairs(ReadOnlyDictionary\u003Cint, WorkItem\u003E keyValuePairs)",
"FirstUsedLine": 442,
"Name": "GetKeyValuePairs",
"ParameterCount": 1,
"StartLine": 117
},
{
"EndLine": 416,
"FirstLine": "private static ReadOnlyCollection\u003Cstring\u003E GetDirectories(string destinationDirectory, ReadOnlyDictionary\u003Cint, Record\u003E keyValuePairs)",
"FirstUsedLine": 448,
"Name": "GetDirectories",
"ParameterCount": 2,
"StartLine": 390
},
{
"EndLine": 353,
"FirstLine": "private static ReadOnlyCollection\u003CWorkItem\u003E FilterChildren(ReadOnlyCollection\u003Cstring\u003E workItemTypes, Record record)",
"FirstUsedLine": 506,
"Name": "FilterChildren",
"ParameterCount": 2,
"StartLine": 347
},
{
"EndLine": 364,
"FirstLine": "private static int GetState(WorkItem workItem) =\u003E",
"FirstUsedLine": 628,
"Name": "GetState",
"ParameterCount": 1,
"StartLine": 354
}
]

12
.vscode/launch.json vendored
View File

@ -19,7 +19,17 @@
"https://oi-metrology-viewer-prod.mes.infineon.com/json/work-items.json?v=2024-10-07-10-09&_=1728336047608",
"Epic|Feature|User Story",
"https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/",
"L:/DevOps/Mesa_FI/File-Folder-Helper/.vscode/helper/tfs"
"L:/DevOps/Mesa_FI/File-Folder-Helper/.vscode/helper/tfs",
"s",
"X",
"T:/MESAFIBACKLOG/06_SourceCode/MESAFIBACKLOG",
"Day-Helper-2024-01-08",
"T:/MESAFIBACKLOG/06_SourceCode/MESAFIBACKLOG/Adaptation/FileHandlers/Markdown",
"s",
"X",
"L:/DevOps/Mesa_FI/File-Folder-Helper",
"Day-Helper-2024-01-08",
"L:/DevOps/Mesa_FI/File-Folder-Helper/ADO2024/PI3"
],
"cwd": "${workspaceFolder}",
"console": "integratedTerminal",

7
.vscode/tasks.json vendored
View File

@ -132,11 +132,16 @@
"type": "shell",
"command": "L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net8.0/win-x64/publish/File-Folder-Helper.exe",
"args": [
"s",
"X",
"T:/MESAFIBACKLOG/06_SourceCode/MESAFIBACKLOG",
"Day-Helper-2024-01-08",
"T:/MESAFIBACKLOG/06_SourceCode/MESAFIBACKLOG/Adaptation/FileHandlers/Markdown",
"s",
"X",
"L:/DevOps/Mesa_FI/File-Folder-Helper",
"Day-Helper-2024-01-08",
"L:/DevOps/Mesa_FI/File-Folder-Helper/Helpers"
"L:/DevOps/Mesa_FI/File-Folder-Helper/ADO2024/PI3"
],
"problemMatcher": []
},

View File

@ -1,5 +1,7 @@
using Microsoft.Extensions.Logging;
using System.Collections.ObjectModel;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.RegularExpressions;
namespace File_Folder_Helper.ADO2024.PI1;
@ -7,11 +9,18 @@ namespace File_Folder_Helper.ADO2024.PI1;
internal static partial class Helper20240108
{
private record Method(string Name,
private record Method(int EndLine,
string FirstLine,
int FirstUsedLine,
string Name,
int ParameterCount,
int StartLine,
int EndLine,
int FirstUsedLine);
int StartLine);
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(Method[]))]
private partial class MethodCollectionCommonSourceGenerationContext : JsonSerializerContext
{
}
[GeneratedRegex(@"(?<method>[A-Z]{1}[A-Za-z_0-9]*)\(")]
private static partial Regex CSharpMethodName();
@ -40,7 +49,7 @@ internal static partial class Helper20240108
for (int j = i - 1; j > -1; j--)
{
line = lines[j].Trim();
if (!line.StartsWith('[') && !line.StartsWith("/// "))
if (!line.StartsWith('[') && !line.StartsWith('#') && !line.StartsWith("/// "))
break;
result--;
}
@ -155,7 +164,9 @@ internal static partial class Helper20240108
string line;
string? name;
int startLine;
Method method;
string search;
string firstLine;
string innerLine;
string searchNot;
string searchWrap;
@ -186,12 +197,18 @@ internal static partial class Helper20240108
startLine = GetStartLine(lines, i);
searchConstructor = $"{name.ToLower()} = new(";
parameterCount = GetParameterCount(line, search);
isLinq = lines[i + 1].Trim() != "{";
if (!lines[startLine].StartsWith("#pragma"))
firstLine = lines[startLine].Trim();
else
firstLine = lines[startLine + 1].Trim();
isLinq = !lines[i + 1].StartsWith("#pragma") && lines[i + 1].Trim() != "{";
if (isLinq)
blocks++;
for (int j = i + 1; j < lines.Length; j++)
{
innerLine = lines[j].Trim();
if (innerLine.StartsWith("#pragma"))
continue;
if (isLinq && string.IsNullOrEmpty(innerLine))
{
if (line.EndsWith(';'))
@ -218,7 +235,8 @@ internal static partial class Helper20240108
}
if (j > lines.Length - 2)
throw new Exception();
results.Add(new(name, parameterCount, startLine, endLine, firstUsedLine.Value));
method = new(endLine, firstLine, firstUsedLine.Value, name, parameterCount, startLine);
results.Add(method);
break;
}
}
@ -230,6 +248,8 @@ internal static partial class Helper20240108
{
bool result;
List<string> results = [];
if (methods.Count == 0)
File.WriteAllText(".vscode/.json", JsonSerializer.Serialize(methods.ToArray(), MethodCollectionCommonSourceGenerationContext.Default.MethodArray));
ReadOnlyCollection<int> methodLines = GetMethodLines(methods);
int minMethodLines = methodLines.Min();
for (int i = 0; i < minMethodLines; i++)

View File

@ -7,48 +7,40 @@ namespace File_Folder_Helper.ADO2024.PI3;
internal static partial class Helper20240911
{
public record Attribute([property: JsonPropertyName("isLocked")] bool IsLocked,
[property: JsonPropertyName("name")] string Name);
private record Attribute([property: JsonPropertyName("isLocked")] bool IsLocked,
[property: JsonPropertyName("name")] string Name);
public record Relation([property: JsonPropertyName("rel")] string Type,
[property: JsonPropertyName("url")] string URL,
[property: JsonPropertyName("attributes")] Attribute Attributes);
private record Relation([property: JsonPropertyName("rel")] string Type,
[property: JsonPropertyName("url")] string URL,
[property: JsonPropertyName("attributes")] Attribute Attributes);
public record Record(WorkItem WorkItem, WorkItem? Parent, ReadOnlyCollection<Record> Children);
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(Record[]))]
internal partial class RecordCollectionCommonSourceGenerationContext : JsonSerializerContext
{
}
public record WorkItem(string AreaPath,
string? AssignedTo,
int? BusinessValue,
DateTime ChangedDate,
DateTime? ClosedDate,
int CommentCount,
DateTime CreatedDate,
string Description,
float? Effort,
int Id,
string IterationPath,
int? Parent,
int? Priority,
Relation[] Relations,
string? Requester,
DateTime? ResolvedDate,
int Revision,
int? RiskReductionMinusOpportunityEnablement,
DateTime? StartDate,
string State,
string Tags,
DateTime? TargetDate,
float? TimeCriticality,
string Title,
string? Violation,
float? WeightedShortestJobFirst,
string WorkItemType)
private record WorkItem(string AreaPath,
string? AssignedTo,
int? BusinessValue,
DateTime ChangedDate,
DateTime? ClosedDate,
int CommentCount,
DateTime CreatedDate,
string Description,
float? Effort,
int Id,
string IterationPath,
int? Parent,
int? Priority,
Relation[] Relations,
string? Requester,
DateTime? ResolvedDate,
int Revision,
int? RiskReductionMinusOpportunityEnablement,
DateTime? StartDate,
string State,
string Tags,
DateTime? TargetDate,
float? TimeCriticality,
string Title,
string? Violation,
float? WeightedShortestJobFirst,
string WorkItemType)
{
public override string ToString() => $"{Id} - {WorkItemType} - {Title}";
@ -86,7 +78,17 @@ internal static partial class Helper20240911
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(WorkItem[]))]
internal partial class WorkItemSourceGenerationContext : JsonSerializerContext
private partial class WorkItemSourceGenerationContext : JsonSerializerContext
{
}
private record Record(WorkItem WorkItem,
WorkItem? Parent,
ReadOnlyCollection<Record> Children);
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(Record[]))]
private partial class RecordCollectionCommonSourceGenerationContext : JsonSerializerContext
{
}
@ -110,6 +112,7 @@ internal static partial class Helper20240911
{
List<Record> results = [];
int? childId;
Record record;
nests.Add(true);
WorkItem? childWorkItem;
WorkItem? parentWorkItem;
@ -128,16 +131,17 @@ internal static partial class Helper20240911
collection.Add(childWorkItem);
}
collection = (from l in collection orderby l.State != "Closed", l.Id select l).ToList();
foreach (WorkItem item in collection)
foreach (WorkItem w in collection)
{
if (nests.Count > 99)
break;
if (item.Parent is null)
if (w.Parent is null)
parentWorkItem = null;
else
_ = keyValuePairs.TryGetValue(item.Parent.Value, out parentWorkItem);
records = GetKeyValuePairs(keyValuePairs, item, nests);
results.Add(new(item, parentWorkItem, records));
_ = keyValuePairs.TryGetValue(w.Parent.Value, out parentWorkItem);
records = GetKeyValuePairs(keyValuePairs, w, nests);
record = new(w, parentWorkItem, records);
results.Add(record);
}
}
return new(results);
@ -219,90 +223,46 @@ internal static partial class Helper20240911
return result;
}
private static ReadOnlyCollection<WorkItem> GetWorkItemsNotMatching(string tags, ReadOnlyCollection<WorkItem> workItems)
{
List<WorkItem> results = [];
string[] segments;
string[] parentTags = tags.Split(';');
foreach (WorkItem workItem in workItems)
{
segments = tags.Split(';');
if (segments.Length > 0 && parentTags.Any(l => segments.Contains(l)))
continue;
results.Add(workItem);
}
return new(results);
}
private static ReadOnlyCollection<WorkItem> GetWorkItemsNotMatching(int? priority, ReadOnlyCollection<WorkItem> workItems)
{
List<WorkItem> results = [];
foreach (WorkItem workItem in workItems)
{
if (workItem.Priority == priority)
continue;
results.Add(workItem);
}
return new(results);
}
private static int GetState(WorkItem workItem) =>
workItem.State switch
{
"New" => 1,
"Active" => 2,
"Resolved" => 3,
"Closed" => 4,
"Removed" => 5,
_ => 8
};
private static ReadOnlyCollection<WorkItem> GetWorkItemsNotMatching(Record record, ReadOnlyCollection<WorkItem> workItems)
{
List<WorkItem> results = [];
int check;
int state = GetState(record.WorkItem);
List<KeyValuePair<int, WorkItem>> collection = [];
foreach (WorkItem workItem in workItems)
{
check = GetState(workItem);
if (check == state)
continue;
collection.Add(new(check, workItem));
}
foreach (KeyValuePair<int, WorkItem> keyValuePair in collection.OrderByDescending(l => l.Key))
results.Add(keyValuePair.Value);
return new(results);
}
private static ReadOnlyCollection<string> GetChildrenDirectories(ReadOnlyDictionary<int, Record> keyValuePairs, List<bool> nests, string parentDirectory, ReadOnlyCollection<Record> children)
private static ReadOnlyCollection<string> GetChildrenDirectories(ReadOnlyDictionary<int, Record> keyValuePairs, List<bool> nests, string parentDirectory, Record record)
{
List<string> results = [];
nests.Add(true);
string directory;
Record? childRecord;
ReadOnlyCollection<string> childrenDirectories;
foreach (Record record in children)
foreach (Record r in record.Children)
{
// if (record.WorkItem.Id == 110730)
// continue;
// if (record.WorkItem.Id == 110732)
// continue;
directory = Path.Combine(parentDirectory, $"{record.WorkItem.WorkItemType[..1]}-{record.WorkItem.Id}-{record.WorkItem.Title.Trim()[..1]}");
directory = Path.Combine(parentDirectory, $"{r.WorkItem.WorkItemType[..1]}-{r.WorkItem.Id}-{r.WorkItem.Title.Trim()[..1]}");
results.Add(directory);
if (!keyValuePairs.TryGetValue(record.WorkItem.Id, out childRecord))
if (!keyValuePairs.TryGetValue(r.WorkItem.Id, out childRecord))
continue;
if (nests.Count > 99)
break;
childrenDirectories = GetChildrenDirectories(keyValuePairs, nests, directory, childRecord.Children);
childrenDirectories = GetChildrenDirectories(keyValuePairs, nests, directory, childRecord);
results.AddRange(childrenDirectories);
}
return new(results);
}
private static void FilterChildren(ReadOnlyCollection<string> workItemTypes, Record record, List<WorkItem> results)
{
foreach (Record r in record.Children)
{
if (!workItemTypes.Contains(r.WorkItem.WorkItemType))
continue;
results.Add(r.WorkItem);
FilterChildren(workItemTypes, r, results);
}
}
private static ReadOnlyDictionary<int, Record> GetKeyValuePairs(ReadOnlyDictionary<int, WorkItem> keyValuePairs)
{
Dictionary<int, Record> results = [];
Record record;
List<bool> nests = [];
WorkItem? parentWorkItem;
ReadOnlyCollection<Record> records;
@ -316,12 +276,13 @@ internal static partial class Helper20240911
try
{
records = GetKeyValuePairs(keyValuePairs, keyValuePair.Value, nests);
results.Add(keyValuePair.Key, new(keyValuePair.Value, parentWorkItem, records));
record = new(keyValuePair.Value, parentWorkItem, records);
}
catch (Exception)
{
results.Add(keyValuePair.Key, new(keyValuePair.Value, parentWorkItem, new([])));
record = new(keyValuePair.Value, parentWorkItem, new([]));
}
results.Add(keyValuePair.Key, record);
}
return new(results);
}
@ -347,40 +308,30 @@ internal static partial class Helper20240911
// continue;
nests.Clear();
directory = Path.Combine(ticksDirectory, $"{record.WorkItem.WorkItemType[..1]}-{record.WorkItem.Id}-{record.WorkItem.Title.Trim()[..1]}");
childrenDirectories = GetChildrenDirectories(keyValuePairs, nests, directory, record.Children);
childrenDirectories = GetChildrenDirectories(keyValuePairs, nests, directory, record);
results.AddRange(childrenDirectories);
}
return new(results.Distinct().ToArray());
}
private static ReadOnlyCollection<WorkItem> FilterChildren(Record record, ReadOnlyCollection<string> workItemTypes)
private static int GetState(WorkItem workItem) =>
workItem.State switch
{
"New" => 1,
"Active" => 2,
"Resolved" => 3,
"Closed" => 4,
"Removed" => 5,
_ => 8
};
private static ReadOnlyCollection<WorkItem> FilterChildren(ReadOnlyCollection<string> workItemTypes, Record record)
{
List<WorkItem> results = [];
WorkItem workItem;
foreach (Record child in record.Children)
{
workItem = child.WorkItem;
if (!workItemTypes.Contains(workItem.WorkItemType))
continue;
results.Add(workItem);
}
FilterChildren(workItemTypes, record, results);
return new(results);
}
private static string? GetMaxIterationPath(ReadOnlyCollection<WorkItem> workItems)
{
string? result;
List<string> results = [];
foreach (WorkItem workItem in workItems)
{
if (results.Contains(workItem.IterationPath))
continue;
results.Add(workItem.IterationPath);
}
result = results.Count == 0 ? null : results.Max();
return result;
}
private static ReadOnlyDictionary<int, Record> GetWorkItems(ILogger<Worker> logger, string developmentURL, string productionURL)
{
ReadOnlyDictionary<int, Record> results;
@ -393,15 +344,18 @@ internal static partial class Helper20240911
logger.LogWarning("{StatusCode} for {url}", httpResponseMessage.Result.StatusCode, developmentURL);
Task<string> developmentJSON = httpResponseMessage.Result.Content.ReadAsStringAsync();
developmentJSON.Wait();
httpResponseMessage = httpClient.GetAsync(productionURL);
httpResponseMessage.Wait();
if (!httpResponseMessage.Result.IsSuccessStatusCode)
logger.LogWarning("{StatusCode} for {url}", httpResponseMessage.Result.StatusCode, productionURL);
Task<string> productionJSON = httpResponseMessage.Result.Content.ReadAsStringAsync();
productionJSON.Wait();
if (developmentJSON.Result != developmentJSON.Result)
logger.LogWarning("developmentJSON doesn't match developmentJSON");
WorkItem[]? workItems = JsonSerializer.Deserialize(productionJSON.Result, WorkItemSourceGenerationContext.Default.WorkItemArray);
if (!string.IsNullOrEmpty(productionURL))
{
httpResponseMessage = httpClient.GetAsync(productionURL);
httpResponseMessage.Wait();
if (!httpResponseMessage.Result.IsSuccessStatusCode)
logger.LogWarning("{StatusCode} for {url}", httpResponseMessage.Result.StatusCode, productionURL);
Task<string> productionJSON = httpResponseMessage.Result.Content.ReadAsStringAsync();
productionJSON.Wait();
if (productionJSON.Result != developmentJSON.Result)
logger.LogWarning("productionJSON doesn't match developmentJSON");
}
WorkItem[]? workItems = JsonSerializer.Deserialize(developmentJSON.Result, WorkItemSourceGenerationContext.Default.WorkItemArray);
if (workItems is null)
logger.LogWarning("workItems is null");
else
@ -453,6 +407,108 @@ internal static partial class Helper20240911
File.WriteAllText(jsonFile, json);
}
private static ReadOnlyCollection<WorkItem> GetWorkItemsNotMatching122514(Record record, ReadOnlyCollection<WorkItem> workItems)
{
List<WorkItem> results = [];
string[] segments;
string[] parentTags = record.WorkItem.Tags.Split(';').Select(l => l.Trim()).ToArray();
foreach (WorkItem workItem in workItems)
{
segments = string.IsNullOrEmpty(workItem.Tags) ? [] : workItem.Tags.Split(';').Select(l => l.Trim()).ToArray();
if (segments.Length > 0 && parentTags.Any(l => segments.Contains(l)))
continue;
results.Add(workItem);
}
return new(results);
}
private static ReadOnlyCollection<WorkItem> GetWorkItemsNotMatching126169(Record record, ReadOnlyCollection<WorkItem> workItems)
{
List<WorkItem> results = [];
foreach (WorkItem workItem in workItems)
{
if (record.WorkItem.Priority is null)
{
results.Add(record.WorkItem);
break;
}
if (workItem.Priority == record.WorkItem.Priority.Value)
continue;
results.Add(workItem);
}
return new(results);
}
private static ReadOnlyCollection<WorkItem> GetWorkItemsNotMatching123066(Record record, ReadOnlyCollection<WorkItem> workItems)
{
List<WorkItem> results = [];
int check;
int state = GetState(record.WorkItem);
List<KeyValuePair<int, WorkItem>> collection = [];
foreach (WorkItem workItem in workItems)
{
if (workItem.State is "Removed")
continue;
check = GetState(workItem);
if (check == state)
continue;
collection.Add(new(check, workItem));
}
if (collection.Count > 0)
{
KeyValuePair<int, WorkItem>[] notNewState = (from l in collection where l.Value.State != "New" select l).ToArray();
if (notNewState.Length == 0 && record.WorkItem.State is "New" or "Active")
collection.Clear();
else if (notNewState.Length > 0)
{
int minimum = notNewState.Min(l => l.Key);
if (minimum == state)
collection.Clear();
else if (minimum == 1 && record.WorkItem.State == "New")
collection.Clear();
else if (notNewState.Length > 0 && record.WorkItem.State == "Active")
collection.Clear();
}
}
foreach (KeyValuePair<int, WorkItem> keyValuePair in collection.OrderByDescending(l => l.Key))
results.Add(keyValuePair.Value);
return new(results);
}
private static ReadOnlyCollection<WorkItem> GetWorkItemsNotMatching123067(Record record, ReadOnlyCollection<WorkItem> workItems)
{
List<WorkItem> results = [];
int check;
int state = GetState(record.WorkItem);
List<KeyValuePair<int, WorkItem>> collection = [];
foreach (WorkItem workItem in workItems)
{
if (record.WorkItem.State is "Removed" or "Resolved" or "Closed")
continue;
check = GetState(workItem);
if (check == state)
continue;
collection.Add(new(check, workItem));
}
foreach (KeyValuePair<int, WorkItem> keyValuePair in collection.OrderByDescending(l => l.Key))
results.Add(keyValuePair.Value);
return new(results);
}
private static string? GetMaxIterationPath122508(ReadOnlyCollection<WorkItem> workItems)
{
string? result;
List<string> results = [];
foreach (WorkItem workItem in workItems)
{
if (results.Contains(workItem.IterationPath))
continue;
results.Add(workItem.IterationPath);
}
result = results.Count == 0 ? null : results.Max();
return result;
}
private static ReadOnlyCollection<WorkItem> FeatureCheckIterationPath122508(string url, List<string> lines, ReadOnlyCollection<string> workItemTypes, ReadOnlyCollection<Record> records, string workItemType)
{
List<WorkItem> results = [];
@ -462,14 +518,16 @@ internal static partial class Helper20240911
ReadOnlyCollection<WorkItem> childrenWorkItems;
foreach (Record record in records)
{
if (record.WorkItem.State is "Removed")
continue;
if (record.WorkItem.WorkItemType != workItemType)
continue;
collection.Clear();
violations.Clear();
if (record.Children.Count == 0)
continue;
childrenWorkItems = FilterChildren(record, workItemTypes);
maxIterationPath = GetMaxIterationPath(childrenWorkItems);
childrenWorkItems = FilterChildren(workItemTypes, record);
maxIterationPath = GetMaxIterationPath122508(childrenWorkItems);
if (string.IsNullOrEmpty(maxIterationPath) || record.WorkItem.IterationPath == maxIterationPath)
continue;
collection.Add($"## {record.WorkItem.AssignedTo} - {record.WorkItem.Id} - {record.WorkItem.Title}");
@ -478,7 +536,7 @@ internal static partial class Helper20240911
collection.Add($"- [ ] {record.WorkItem.Id} => {record.WorkItem.IterationPath} != {maxIterationPath}");
collection.Add(string.Empty);
lines.AddRange(collection);
results.Add(WorkItem.Get(record.WorkItem, $"IterationPath:<a target='_blank' href='{url}{record.WorkItem.Id}'>{record.WorkItem.Id}</a>;{record.WorkItem.IterationPath} != {maxIterationPath}"));
results.Add(WorkItem.Get(record.WorkItem, $"IterationPath:<a target='_blank' href=' {url}{record.WorkItem.Id} '>{record.WorkItem.Id}</a>;{record.WorkItem.IterationPath} != {maxIterationPath}"));
}
return new(results);
}
@ -492,6 +550,8 @@ internal static partial class Helper20240911
ReadOnlyCollection<WorkItem> workItemsNotMatching;
foreach (Record record in records)
{
if (record.WorkItem.State is "Removed")
continue;
if (record.WorkItem.WorkItemType != workItemType)
continue;
collection.Clear();
@ -502,8 +562,8 @@ internal static partial class Helper20240911
workItemsNotMatching = new([record.WorkItem]);
else
{
childrenWorkItems = FilterChildren(record, workItemTypes);
workItemsNotMatching = GetWorkItemsNotMatching(record.WorkItem.Tags, childrenWorkItems);
childrenWorkItems = FilterChildren(workItemTypes, record);
workItemsNotMatching = GetWorkItemsNotMatching122514(record, childrenWorkItems);
if (!string.IsNullOrEmpty(record.WorkItem.Tags) && workItemsNotMatching.Count == 0)
continue;
}
@ -516,7 +576,7 @@ internal static partial class Helper20240911
lines.AddRange(collection);
violations.Add($"Tag:{record.WorkItem.Tags};");
foreach (WorkItem workItem in workItemsNotMatching)
violations.Add($"<a target='_blank' href='{url}{workItem.Id}'>{workItem.Id}</a>:{workItem.Tags};");
violations.Add($"<a target='_blank' href=' {url}{workItem.Id} '>{workItem.Id}</a>:{workItem.Tags};");
results.Add(WorkItem.Get(record.WorkItem, string.Join(' ', violations)));
}
return new(results);
@ -531,14 +591,16 @@ internal static partial class Helper20240911
ReadOnlyCollection<WorkItem> workItemsNotMatching;
foreach (Record record in records)
{
if (record.WorkItem.State is "Removed")
continue;
if (record.WorkItem.WorkItemType != workItemType)
continue;
collection.Clear();
violations.Clear();
if (record.Children.Count == 0)
continue;
childrenWorkItems = FilterChildren(record, workItemTypes);
workItemsNotMatching = GetWorkItemsNotMatching(record.WorkItem.Priority, childrenWorkItems);
childrenWorkItems = FilterChildren(workItemTypes, record);
workItemsNotMatching = GetWorkItemsNotMatching126169(record, childrenWorkItems);
if (workItemsNotMatching.Count == 0)
continue;
collection.Add($"## {record.WorkItem.AssignedTo} - {record.WorkItem.Id} - {record.WorkItem.Title}");
@ -550,7 +612,7 @@ internal static partial class Helper20240911
lines.AddRange(collection);
violations.Add($"Priority:{record.WorkItem.Priority};");
foreach (WorkItem workItem in workItemsNotMatching)
violations.Add($"<a target='_blank' href='{url}{workItem.Id}'>{workItem.Id}</a>:{workItem.Priority};");
violations.Add($"<a target='_blank' href=' {url}{workItem.Id} '>{workItem.Id}</a>:{workItem.Priority};");
results.Add(WorkItem.Get(record.WorkItem, string.Join(' ', violations)));
}
return new(results);
@ -565,16 +627,16 @@ internal static partial class Helper20240911
ReadOnlyCollection<WorkItem> workItemsNotMatching;
foreach (Record record in records)
{
if (record.WorkItem.State is "Removed")
continue;
if (record.WorkItem.WorkItemType != workItemType)
continue;
collection.Clear();
violations.Clear();
if (record.WorkItem.State == "New")
continue;
if (record.Children.Count == 0)
continue;
childrenWorkItems = FilterChildren(record, workItemTypes);
workItemsNotMatching = GetWorkItemsNotMatching(record, childrenWorkItems);
childrenWorkItems = FilterChildren(workItemTypes, record);
workItemsNotMatching = GetWorkItemsNotMatching123066(record, childrenWorkItems);
if (workItemsNotMatching.Count == 0)
continue;
collection.Add($"## {record.WorkItem.AssignedTo} - {record.WorkItem.Id} - {record.WorkItem.Title}");
@ -586,7 +648,7 @@ internal static partial class Helper20240911
lines.AddRange(collection);
violations.Add($"State:{record.WorkItem.State};");
foreach (WorkItem workItem in workItemsNotMatching)
violations.Add($"<a target='_blank' href='{url}{workItem.Id}'>{workItem.Id}</a>:{workItem.State};");
violations.Add($"<a target='_blank' href=' {url}{workItem.Id} '>{workItem.Id}</a>:{workItem.State};");
results.Add(WorkItem.Get(record.WorkItem, string.Join(' ', violations)));
}
return new(results);
@ -601,14 +663,16 @@ internal static partial class Helper20240911
ReadOnlyCollection<WorkItem> workItemsNotMatching;
foreach (Record record in records)
{
if (record.WorkItem.State is "Removed" or "New" or "Active")
continue;
if (record.WorkItem.WorkItemType != workItemType)
continue;
collection.Clear();
violations.Clear();
if (record.Children.Count == 0)
continue;
childrenWorkItems = FilterChildren(record, workItemTypes);
workItemsNotMatching = GetWorkItemsNotMatching(record, childrenWorkItems);
childrenWorkItems = FilterChildren(workItemTypes, record);
workItemsNotMatching = GetWorkItemsNotMatching123067(record, childrenWorkItems);
if (workItemsNotMatching.Count == 0)
continue;
collection.Add($"## {record.WorkItem.AssignedTo} - {record.WorkItem.Id} - {record.WorkItem.Title}");
@ -620,7 +684,7 @@ internal static partial class Helper20240911
lines.AddRange(collection);
violations.Add($"State:{record.WorkItem.State};");
foreach (WorkItem workItem in workItemsNotMatching)
violations.Add($"<a target='_blank' href='{url}{workItem.Id}'>{workItem.Id}</a>:{workItem.State};");
violations.Add($"<a target='_blank' href=' {url}{workItem.Id} '>{workItem.Id}</a>:{workItem.State};");
results.Add(WorkItem.Get(record.WorkItem, string.Join(' ', violations)));
}
return new(results);

View File

@ -15,13 +15,13 @@
<ItemGroup>
<PackageReference Include="CommonMark.NET" Version="0.15.1" />
<PackageReference Include="DiscUtils.Iso9660" Version="0.16.13" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.1" />
<PackageReference Include="Microsoft.TeamFoundationServer.Client" Version="19.225.1" />
<PackageReference Include="runtime.win-x64.Microsoft.DotNet.ILCompiler" Version="8.0.8" />
<PackageReference Include="System.Text.Json" Version="8.0.4" />
<PackageReference Include="runtime.win-x64.Microsoft.DotNet.ILCompiler" Version="8.0.10" />
<PackageReference Include="System.Text.Json" Version="8.0.5" />
<PackageReference Include="TextCopy" Version="6.2.1" />
<PackageReference Include="WindowsShortcutFactory" Version="1.2.0" />
<PackageReference Include="YamlDotNet" Version="16.1.2" />
<PackageReference Include="YamlDotNet" Version="16.1.3" />
</ItemGroup>
</Project>