Compare commits

..

1 Commits
main ... 11-15

Author SHA1 Message Date
2d14254816 Get ready to use VSCode IDE 2024-11-15 13:44:27 -07:00
55 changed files with 263 additions and 1950 deletions

View File

@ -19,7 +19,7 @@ insert_final_newline = false
# Organize usings
dotnet_separate_import_directive_groups = true
dotnet_sort_system_directives_first = true
dotnet_sort_system_directives_first = false
file_header_template = unset
# this. and Me. preferences
@ -249,39 +249,4 @@ dotnet_style_operator_placement_when_wrapping = beginning_of_line
tab_width = 4
indent_size = 4
end_of_line = crlf
dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion
# Question
csharp_style_inlined_variable_declaration = false
csharp_style_prefer_primary_constructors = false
dotnet_diagnostic.CA1510.severity = none # "Use 'ArgumentNullException.ThrowIfNull' instead of explicitly throwing a new exception instance
dotnet_diagnostic.CA1806.severity = none # SendEmailWithValidArgsShouldSendMailThroughClient calls TryParse but does not explicitly
dotnet_diagnostic.CA1827.severity = none # Count() is used where Any() could be used instead to improve performance
dotnet_diagnostic.CA1829.severity = none # Use the property instead of Enumerable.Count()
dotnet_diagnostic.CA1860.severity = none # Prefer comparing 'Count' to 0 rather than using 'Any()', both for clarity and for performance
dotnet_diagnostic.CA2208.severity = none # Method .ctor passes
dotnet_diagnostic.CA2208.severity = none # Method .ctor passes
dotnet_diagnostic.CA2211.severity = none # Non-constant fields should not be visible
dotnet_diagnostic.CA2253.severity = none # Named placeholders in the logging message template should not be comprised
dotnet_diagnostic.CA2254.severity = none # The logging message template should not vary between calls to
dotnet_diagnostic.CS1998.severity = none # This async method lacks 'await' operators and will run synchronously
dotnet_diagnostic.CS8618.severity = none # Non-nullable field '_mockDalService' must contain a non-null value when exiting constructor
dotnet_diagnostic.CS8625.severity = none # Cannot convert null literal to non-nullable reference type
dotnet_diagnostic.IDE0005.severity = none # Using directive is unnecessary.
dotnet_diagnostic.IDE0017.severity = none # Object initialization can be simplified
dotnet_diagnostic.IDE0018.severity = none # Variable declaration can be inlined
dotnet_diagnostic.IDE0028.severity = none # Collection initialization can be simplified
dotnet_diagnostic.IDE0044.severity = none # Make field readonly
dotnet_diagnostic.IDE0046.severity = none # 'if' statement can be simplified
dotnet_diagnostic.IDE0052.severity = none # "Private member can be removed
dotnet_diagnostic.IDE0270.severity = none # Null check can be simplified
dotnet_diagnostic.IDE0290.severity = none # Use primary constructor
dotnet_diagnostic.IDE1006.severity = none # Naming rule violation: These words must begin with upper case characters
dotnet_diagnostic.IDE2000.severity = error # IDE2000: Allow multiple blank lines
dotnet_diagnostic.NUnit2001.severity = none # Consider using the constraint model, Assert.That(expr, Is.False), instead of the classic model
dotnet_diagnostic.NUnit2004.severity = none # Consider using the constraint model
dotnet_diagnostic.NUnit2010.severity = none # Use Is.EqualTo constraint instead of direct comparison for better assertion messages in ca
dotnet_style_coalesce_expression = false
dotnet_style_object_initializer = false
dotnet_style_prefer_conditional_expression_over_return = false
dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion

5
.gitignore vendored
View File

@ -2,7 +2,4 @@
bin
obj
TestResults
Properties
/FabApprovalWorkerService/.vscode/.UserSecrets
/FabApprovalWorkerServiceTests/.vscode/.UserSecrets
Properties

View File

@ -1 +0,0 @@
[]

30
.vscode/launch.json vendored
View File

@ -1,30 +0,0 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (console)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "FabApprovalWorkerService-build",
"program": "${workspaceFolder}/FabApprovalWorkerService/bin/Debug/net8.0/win-x64/FabApprovalWorkerServiceTests.dll",
"args": [],
"cwd": "${workspaceFolder}",
"console": "integratedTerminal",
"stopAtEntry": false
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach"
},
{
"type": "node",
"request": "launch",
"name": "node Launch Current Opened File",
"program": "${file}"
}
]
}

424
.vscode/settings.json vendored
View File

@ -1,424 +0,0 @@
{
"[markdown]": {
"editor.wordWrap": "off"
},
"files.exclude": {
"**/.git": false,
"**/node_modules": true
},
"files.watcherExclude": {
"**/node_modules": true
},
"cSpell.words": [
"abutton",
"accessibilities",
"accodingly",
"acknowledgmentby",
"Acks",
"actionsheet",
"Additonal",
"Addtional",
"againm",
"agendaview",
"Antlr",
"Appover",
"Appprrovers",
"Approvalog",
"Aprovers",
"Aproverslist",
"asax",
"aspnetmvc",
"Assignedto",
"Atachments",
"Attachemnt",
"Attachemnts",
"Attchment",
"auditee",
"Auditee",
"Auditees",
"automaically",
"Autthorized",
"beacuase",
"beforeunload",
"Belguim",
"bfound",
"bgcolor",
"Bies",
"binded",
"blackbackground",
"blackhover",
"blackpressed",
"blueenergy",
"blueopal",
"buttongroup",
"BYMRB",
"bytesgot",
"CAID",
"casection",
"CAXXXX",
"CCPCR",
"CCPCRB",
"cellspacing",
"Cheeso's",
"chkbx",
"Clib",
"colorpicker",
"columnmenu",
"columnsreorder",
"columnsresize",
"comming",
"Containmen",
"Copmments",
"correctiv",
"Correctivet",
"Creat",
"currentd",
"Cyle",
"dadada",
"darkbluehover",
"darkbluepressed",
"darkred",
"datafields",
"datasource",
"dataviz",
"datepicker",
"datetimepicker",
"dayview",
"Deletet",
"Delgation",
"DENITED",
"Deparmtent",
"departmentids",
"Descirption",
"devprog",
"dfeffc",
"Disp",
"Dispo",
"Dispoitio",
"Dispos",
"Dispositon",
"Dispostion",
"Dispostions",
"dispotypevalidation",
"Docbase",
"Documentum",
"Documetum",
"dont",
"downlaoded",
"draganddrop",
"dragcancel",
"dropdownlist",
"Eamils",
"ECNPCRB",
"Ecns",
"edmx",
"EECN",
"emai",
"emailparams",
"Emergrncy",
"energyblue",
"Eran",
"Esql",
"ETECN",
"EXCELOPENXML",
"existinglocation",
"Expando",
"extrafield",
"fadc",
"fbec",
"fcfdfd",
"fdff",
"fece",
"feeebd",
"ffdc",
"ffdd",
"fieldset",
"FILIPE",
"filtermenu",
"Fldr",
"flintstone",
"FLOWLOCS",
"FMEA",
"ftplib",
"FTPSPN",
"GETDATE",
"gitea",
"globaldocudms",
"glyphicons",
"groupable",
"Guids",
"halflings",
"Hexsize",
"highcontrast",
"Hmac",
"holdsteps",
"hostspecific",
"icenium",
"IECN",
"imagebrowser",
"IMRB",
"Infineon",
"Insertd",
"inverseicons",
"IPCRB",
"ISADMIN",
"islast",
"ISNULL",
"ITAR",
"jquery",
"jqueryval",
"jqwidgets",
"jqxbuttongroup",
"jqxbuttons",
"jqxcalendar",
"jqxchart",
"jqxcheckbox",
"jqxcolorpicker",
"jqxcombobox",
"jqxcore",
"jqxdata",
"jqxdatatable",
"jqxdatetimeinput",
"jqxdocking",
"jqxdockpanel",
"jqxdragdrop",
"jqxdropdownbutton",
"jqxdropdownlist",
"jqxexpander",
"jqxgauge",
"jqxgrid",
"jqxinput",
"jqxknockout",
"jqxlistbox",
"jqxlistmenu",
"jqxmaskedinput",
"jqxmenu",
"jqxnavigationbar",
"jqxnumberinput",
"jqxpanel",
"jqxpasswordinput",
"jqxprogressbar",
"jqxradiobutton",
"jqxrangeselector",
"jqxrating",
"jqxresponse",
"jqxscrollbar",
"jqxscrollview",
"jqxslider",
"jqxsplitter",
"jqxswitchbutton",
"jqxtabs",
"jqxtooltip",
"jqxtouch",
"jqxtree",
"jqxtreegrid",
"jqxtreemap",
"jqxvalidator",
"jqxwindow",
"kendogridcustom",
"kendoui",
"labelelement",
"labelledby",
"Leanred",
"lightgray",
"linkbutton",
"Linq",
"Listdiv",
"listview",
"Lnks",
"localfilename",
"loclist",
"logis",
"logtext",
"loopmis",
"lotdispo",
"LOTDISPSITION",
"Lotfile",
"lotlist",
"lotstatusoption",
"LTRIM",
"MADUREIRA",
"mailrelay",
"MDTM",
"meego",
"meetingid",
"menubutton",
"mesafi",
"metroblack",
"metrodark",
"miliseconds",
"modalview",
"modernizr",
"Modernizr",
"monthview",
"MRBIs",
"Mrbs",
"msecs",
"multipleextended",
"Navigatable",
"nbsp",
"newbase",
"newchange",
"newdi",
"newfilename",
"newsource",
"Newtonsoft",
"notications",
"Notifcation",
"Notifyf",
"NTLM",
"Nullcc",
"numerictextbox",
"objdata",
"OCAP",
"occured",
"odata",
"oldfilename",
"OLHOLD",
"onclick",
"onmousemove",
"OPDESC",
"OPENQUERY",
"Oper",
"operationslist",
"Orginator",
"Originatorname",
"Ouellette",
"Owin",
"pageable",
"Pageable",
"panelbar",
"parentid",
"parminput",
"parms",
"Parms",
"particula",
"pasv",
"PASV",
"PATINDEX",
"PCRB",
"PCRBID",
"pcrvalues",
"pdbonly",
"Preventitive",
"preventivet",
"Prevetative",
"proces",
"Processedl",
"procs",
"productfamilies",
"progess",
"progressbar",
"qrcode",
"Quanityt",
"rangebar",
"Recep",
"Recepient",
"recieved",
"recordlock",
"remotefilename",
"reorderable",
"reportform",
"reportslist",
"reportslistdiv",
"Reqquired",
"Reqs",
"Requiest",
"Responsibles",
"RETR",
"Revisioing",
"Revisioned",
"Revison",
"rgba",
"rkotian",
"RNFR",
"RNTO",
"Roless",
"roundbg",
"RTRIM",
"SAMDB",
"scroller",
"scrollview",
"seleced",
"selectionlog",
"Selectpart",
"sess",
"Sfisharepoint",
"shinyblack",
"showpassword",
"SIGNON",
"simpleparser",
"slddrw",
"sldprt",
"sortasc",
"sortascbutton",
"sortdesc",
"sortdescbutton",
"sortremove",
"sparkline",
"splitview",
"SPNMRB",
"SPNPDB",
"SSRS",
"Sssign",
"Staus",
"stylesheet",
"Submited",
"subrole",
"subroles",
"Succefully",
"Succesfully",
"sucessfully",
"SURP",
"Swashbuckle",
"SWRN",
"tabindex",
"tabstrip",
"Tahoma",
"taskcompleted",
"Tasklist",
"Taveler",
"TECN",
"TECNs",
"TEMIRWAP",
"tempecd",
"tempimplement",
"templabel",
"tempvalue",
"TEMSA",
"timepicker",
"Tobe",
"Toplevel",
"Totrav",
"trainingby",
"Traininglist",
"traininglistdiv",
"transanction",
"Trav",
"Traveller",
"Traverler",
"TRAVLELER",
"Travler",
"TREEVIEW",
"trigerred",
"ttinclude",
"Uhandled",
"Updat",
"Uplaod",
"Upto",
"userevents",
"userids",
"userlist",
"Validatable",
"valueelement",
"Variabls",
"Verdana",
"vgrid",
"viewmodel",
"vsdoc",
"whethere",
"windowsphone",
"Winsock",
"worlflow"
]
}

1
.vscode/spell.md vendored
View File

@ -1 +0,0 @@
# Spell

239
.vscode/tasks.json vendored
View File

@ -1,239 +0,0 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "FabApprovalWorkerService-User Secrets Init",
"command": "dotnet",
"type": "process",
"args": [
"user-secrets",
"-p",
"${workspaceFolder}/FabApprovalWorkerService/FabApprovalWorkerService.csproj",
"init"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerService-User Secrets Set",
"command": "dotnet",
"type": "process",
"args": [
"user-secrets",
"-p",
"${workspaceFolder}/FabApprovalWorkerService/FabApprovalWorkerService.csproj",
"set",
"_UserSecretsId",
"0c43f9aa-96e9-4298-967c-ed069d79e262"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerService-Format",
"command": "dotnet",
"type": "process",
"args": [
"format",
"--report",
".vscode",
"--verbosity",
"detailed",
"--severity",
"warn"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerService-Format-Whitespaces",
"command": "dotnet",
"type": "process",
"args": [
"format",
"whitespace"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerService-build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/FabApprovalWorkerService/FabApprovalWorkerService.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerService-publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/FabApprovalWorkerService/FabApprovalWorkerService.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerService-watch",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run",
"--project",
"${workspaceFolder}/FabApprovalWorkerService/FabApprovalWorkerService.csproj"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerService-Publish AOT",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"-r",
"win-x64",
"-c",
"Release",
"-p:PublishAot=true",
"${workspaceFolder}/FabApprovalWorkerService/FabApprovalWorkerService.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerServiceTests-User Secrets Init",
"command": "dotnet",
"type": "process",
"args": [
"user-secrets",
"-p",
"${workspaceFolder}/FabApprovalWorkerServiceTests/FabApprovalWorkerServiceTests.csproj",
"init"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerServiceTests-User Secrets Set",
"command": "dotnet",
"type": "process",
"args": [
"user-secrets",
"-p",
"${workspaceFolder}/FabApprovalWorkerServiceTests/FabApprovalWorkerServiceTests.csproj",
"set",
"_UserSecretsId",
"f445e6e0-784b-4dde-9ef0-2143e6e90b1b"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerServiceTests-Format",
"command": "dotnet",
"type": "process",
"args": [
"format",
"--report",
".vscode",
"--verbosity",
"detailed",
"--severity",
"warn"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerServiceTests-Format-Whitespaces",
"command": "dotnet",
"type": "process",
"args": [
"format",
"whitespace"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerServiceTests-build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/FabApprovalWorkerServiceTests/FabApprovalWorkerServiceTests.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerServiceTests-testDebug",
"command": "dotnet",
"type": "process",
"args": [
"test",
"${workspaceFolder}/FabApprovalWorkerServiceTests/FabApprovalWorkerServiceTests.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerServiceTests-testRelease",
"command": "dotnet",
"type": "process",
"args": [
"test",
"${workspaceFolder}/FabApprovalWorkerServiceTests/FabApprovalWorkerServiceTests.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary",
"-c",
"Release"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerServiceTests-publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/FabApprovalWorkerServiceTests/FabApprovalWorkerServiceTests.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerServiceTests-watch",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run",
"--project",
"${workspaceFolder}/FabApprovalWorkerServiceTests/FabApprovalWorkerServiceTests.csproj"
],
"problemMatcher": "$msCompile"
},
{
"label": "FabApprovalWorkerServiceTests-Publish AOT",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"-r",
"win-x64",
"-c",
"Release",
"-p:PublishAot=true",
"${workspaceFolder}/FabApprovalWorkerServiceTests/FabApprovalWorkerServiceTests.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
}
]
}

View File

@ -19,7 +19,7 @@ insert_final_newline = false
# Organize usings
dotnet_separate_import_directive_groups = true
dotnet_sort_system_directives_first = true
dotnet_sort_system_directives_first = false
file_header_template = unset
# this. and Me. preferences
@ -253,10 +253,8 @@ dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion
# Question
csharp_style_inlined_variable_declaration = false
csharp_style_prefer_primary_constructors = false
dotnet_diagnostic.CA1510.severity = none # "Use 'ArgumentNullException.ThrowIfNull' instead of explicitly throwing a new exception instance
dotnet_diagnostic.CA1806.severity = none # SendEmailWithValidArgsShouldSendMailThroughClient calls TryParse but does not explicitly
dotnet_diagnostic.CA1827.severity = none # Count() is used where Any() could be used instead to improve performance
dotnet_diagnostic.CA1829.severity = none # Use the property instead of Enumerable.Count()
dotnet_diagnostic.CA1860.severity = none # Prefer comparing 'Count' to 0 rather than using 'Any()', both for clarity and for performance
@ -265,12 +263,8 @@ dotnet_diagnostic.CA2208.severity = none # Method .ctor passes
dotnet_diagnostic.CA2211.severity = none # Non-constant fields should not be visible
dotnet_diagnostic.CA2253.severity = none # Named placeholders in the logging message template should not be comprised
dotnet_diagnostic.CA2254.severity = none # The logging message template should not vary between calls to
dotnet_diagnostic.CS1998.severity = none # This async method lacks 'await' operators and will run synchronously
dotnet_diagnostic.CS8618.severity = none # Non-nullable field '_mockDalService' must contain a non-null value when exiting constructor
dotnet_diagnostic.CS8625.severity = none # Cannot convert null literal to non-nullable reference type
dotnet_diagnostic.IDE0005.severity = none # Using directive is unnecessary.
dotnet_diagnostic.IDE0017.severity = none # Object initialization can be simplified
dotnet_diagnostic.IDE0018.severity = none # Variable declaration can be inlined
dotnet_diagnostic.IDE0028.severity = none # Collection initialization can be simplified
dotnet_diagnostic.IDE0044.severity = none # Make field readonly
dotnet_diagnostic.IDE0046.severity = none # 'if' statement can be simplified
@ -278,10 +272,6 @@ dotnet_diagnostic.IDE0052.severity = none # "Private member can be removed
dotnet_diagnostic.IDE0270.severity = none # Null check can be simplified
dotnet_diagnostic.IDE0290.severity = none # Use primary constructor
dotnet_diagnostic.IDE1006.severity = none # Naming rule violation: These words must begin with upper case characters
dotnet_diagnostic.IDE2000.severity = error # IDE2000: Allow multiple blank lines
dotnet_diagnostic.NUnit2001.severity = none # Consider using the constraint model, Assert.That(expr, Is.False), instead of the classic model
dotnet_diagnostic.NUnit2004.severity = none # Consider using the constraint model
dotnet_diagnostic.NUnit2010.severity = none # Use Is.EqualTo constraint instead of direct comparison for better assertion messages in ca
dotnet_style_coalesce_expression = false
dotnet_style_object_initializer = false
dotnet_style_prefer_conditional_expression_over_return = false
dotnet_style_prefer_conditional_expression_over_return = false

View File

@ -1,424 +1,27 @@
{
"[markdown]": {
"editor.wordWrap": "off"
},
"files.exclude": {
"**/.git": false,
"**/node_modules": true
},
"files.watcherExclude": {
"**/node_modules": true
},
"cSpell.words": [
"abutton",
"accessibilities",
"accodingly",
"acknowledgmentby",
"Acks",
"actionsheet",
"Additonal",
"Addtional",
"againm",
"agendaview",
"Antlr",
"Appover",
"Appprrovers",
"Approvalog",
"Aprovers",
"Aproverslist",
"asax",
"aspnetmvc",
"Assignedto",
"Atachments",
"Attachemnt",
"Attachemnts",
"Attchment",
"auditee",
"Auditee",
"Auditees",
"automaically",
"Autthorized",
"beacuase",
"beforeunload",
"Belguim",
"bfound",
"bgcolor",
"Bies",
"binded",
"blackbackground",
"blackhover",
"blackpressed",
"blueenergy",
"blueopal",
"buttongroup",
"BYMRB",
"bytesgot",
"CAID",
"casection",
"CAXXXX",
"CCPCR",
"CCPCRB",
"cellspacing",
"Cheeso's",
"chkbx",
"Clib",
"colorpicker",
"columnmenu",
"columnsreorder",
"columnsresize",
"comming",
"Containmen",
"Copmments",
"correctiv",
"Correctivet",
"Creat",
"currentd",
"Cyle",
"dadada",
"darkbluehover",
"darkbluepressed",
"darkred",
"datafields",
"datasource",
"dataviz",
"datepicker",
"datetimepicker",
"dayview",
"Deletet",
"Delgation",
"DENITED",
"Deparmtent",
"departmentids",
"Descirption",
"devprog",
"dfeffc",
"Disp",
"Dispo",
"Dispoitio",
"Dispos",
"Dispositon",
"Dispostion",
"Dispostions",
"dispotypevalidation",
"Docbase",
"Documentum",
"Documetum",
"dont",
"downlaoded",
"draganddrop",
"dragcancel",
"dropdownlist",
"Eamils",
"ECNPCRB",
"Ecns",
"edmx",
"EECN",
"emai",
"emailparams",
"Emergrncy",
"energyblue",
"Eran",
"Esql",
"ETECN",
"EXCELOPENXML",
"existinglocation",
"Expando",
"extrafield",
"fadc",
"fbec",
"fcfdfd",
"fdff",
"fece",
"feeebd",
"ffdc",
"ffdd",
"fieldset",
"FILIPE",
"filtermenu",
"Fldr",
"flintstone",
"FLOWLOCS",
"FMEA",
"ftplib",
"FTPSPN",
"GETDATE",
"gitea",
"globaldocudms",
"glyphicons",
"groupable",
"Guids",
"halflings",
"Hexsize",
"highcontrast",
"Hmac",
"holdsteps",
"hostspecific",
"icenium",
"IECN",
"imagebrowser",
"IMRB",
"Infineon",
"Insertd",
"inverseicons",
"IPCRB",
"ISADMIN",
"islast",
"ISNULL",
"ITAR",
"jquery",
"jqueryval",
"jqwidgets",
"jqxbuttongroup",
"jqxbuttons",
"jqxcalendar",
"jqxchart",
"jqxcheckbox",
"jqxcolorpicker",
"jqxcombobox",
"jqxcore",
"jqxdata",
"jqxdatatable",
"jqxdatetimeinput",
"jqxdocking",
"jqxdockpanel",
"jqxdragdrop",
"jqxdropdownbutton",
"jqxdropdownlist",
"jqxexpander",
"jqxgauge",
"jqxgrid",
"jqxinput",
"jqxknockout",
"jqxlistbox",
"jqxlistmenu",
"jqxmaskedinput",
"jqxmenu",
"jqxnavigationbar",
"jqxnumberinput",
"jqxpanel",
"jqxpasswordinput",
"jqxprogressbar",
"jqxradiobutton",
"jqxrangeselector",
"jqxrating",
"jqxresponse",
"jqxscrollbar",
"jqxscrollview",
"jqxslider",
"jqxsplitter",
"jqxswitchbutton",
"jqxtabs",
"jqxtooltip",
"jqxtouch",
"jqxtree",
"jqxtreegrid",
"jqxtreemap",
"jqxvalidator",
"jqxwindow",
"kendogridcustom",
"kendoui",
"labelelement",
"labelledby",
"Leanred",
"lightgray",
"linkbutton",
"Linq",
"Listdiv",
"listview",
"Lnks",
"localfilename",
"loclist",
"logis",
"logtext",
"loopmis",
"lotdispo",
"LOTDISPSITION",
"Lotfile",
"lotlist",
"lotstatusoption",
"LTRIM",
"MADUREIRA",
"mailrelay",
"MDTM",
"meego",
"meetingid",
"menubutton",
"mesafi",
"metroblack",
"metrodark",
"miliseconds",
"modalview",
"modernizr",
"Modernizr",
"monthview",
"MRBIs",
"Mrbs",
"msecs",
"multipleextended",
"Navigatable",
"nbsp",
"newbase",
"newchange",
"newdi",
"newfilename",
"newsource",
"Newtonsoft",
"notications",
"Notifcation",
"Notifyf",
"NTLM",
"Nullcc",
"numerictextbox",
"objdata",
"OCAP",
"occured",
"odata",
"oldfilename",
"OLHOLD",
"onclick",
"onmousemove",
"OPDESC",
"OPENQUERY",
"Oper",
"operationslist",
"Orginator",
"Originatorname",
"Ouellette",
"Owin",
"pageable",
"Pageable",
"panelbar",
"parentid",
"parminput",
"parms",
"Parms",
"particula",
"pasv",
"PASV",
"PATINDEX",
"PCRB",
"PCRBID",
"pcrvalues",
"pdbonly",
"Preventitive",
"preventivet",
"Prevetative",
"proces",
"Processedl",
"procs",
"productfamilies",
"progess",
"progressbar",
"qrcode",
"Quanityt",
"rangebar",
"Recep",
"Recepient",
"recieved",
"recordlock",
"remotefilename",
"reorderable",
"reportform",
"reportslist",
"reportslistdiv",
"Reqquired",
"Reqs",
"Requiest",
"Responsibles",
"RETR",
"Revisioing",
"Revisioned",
"Revison",
"rgba",
"rkotian",
"RNFR",
"RNTO",
"Roless",
"roundbg",
"RTRIM",
"SAMDB",
"scroller",
"scrollview",
"seleced",
"selectionlog",
"Selectpart",
"sess",
"Sfisharepoint",
"shinyblack",
"showpassword",
"SIGNON",
"simpleparser",
"slddrw",
"sldprt",
"sortasc",
"sortascbutton",
"sortdesc",
"sortdescbutton",
"sortremove",
"sparkline",
"splitview",
"SPNMRB",
"SPNPDB",
"SSRS",
"Sssign",
"Staus",
"stylesheet",
"Submited",
"subrole",
"subroles",
"Succefully",
"Succesfully",
"sucessfully",
"SURP",
"Swashbuckle",
"SWRN",
"tabindex",
"tabstrip",
"Tahoma",
"taskcompleted",
"Tasklist",
"Taveler",
"TECN",
"TECNs",
"TEMIRWAP",
"tempecd",
"tempimplement",
"templabel",
"tempvalue",
"TEMSA",
"timepicker",
"Tobe",
"Toplevel",
"Totrav",
"trainingby",
"Traininglist",
"traininglistdiv",
"transanction",
"Trav",
"Traveller",
"Traverler",
"TRAVLELER",
"Travler",
"TREEVIEW",
"trigerred",
"ttinclude",
"Uhandled",
"Updat",
"Uplaod",
"Upto",
"userevents",
"userids",
"userlist",
"Validatable",
"valueelement",
"Variabls",
"Verdana",
"vgrid",
"viewmodel",
"vsdoc",
"whethere",
"windowsphone",
"Winsock",
"worlflow"
]
"[markdown]": {
"editor.wordWrap": "off"
},
"files.exclude": {
"**/.git": false,
"**/node_modules": true
},
"files.watcherExclude": {
"**/node_modules": true
},
"cSpell.words": [
"Acks",
"DENITED",
"Eamils",
"Ecns",
"IECN",
"IMRB",
"Infineon",
"IPCRB",
"ITAR",
"mailrelay",
"PCRB",
"TECN",
"TECNs"
]
}

View File

@ -23,7 +23,7 @@
"${workspaceFolder}/FabApprovalWorkerService.csproj",
"set",
"_UserSecretsId",
"e76dda63-1df3-422a-b758-1c057e5b1e25"
"0c43f9aa-96e9-4298-967c-ed069d79e262"
],
"problemMatcher": "$msCompile"
},

View File

@ -17,4 +17,4 @@ public class SmtpClientWrapper : ISmtpClientWrapper {
public void Send(MailMessage message) {
_client.Send(message);
}
}
}

View File

@ -4,7 +4,7 @@
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>e76dda63-1df3-422a-b758-1c057e5b1e25</UserSecretsId>
<UserSecretsId>dotnet-FabApprovalWorkerService-e76dda63-1df3-422a-b758-1c057e5b1e25</UserSecretsId>
<ServerGarbageCollection>true</ServerGarbageCollection>
<EnforceCodeStyleInBuild>True</EnforceCodeStyleInBuild>
<Configurations>Debug;Release;Staging</Configurations>
@ -34,7 +34,6 @@
<PackageReference Include="Infineon.Monitoring.MonA" Version="3.0.1" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="5.2.0" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.0" />

View File

@ -1,133 +0,0 @@
using System.Text.Json;
using System.Text.Json.Serialization;
namespace FabApprovalWorkerService.Models;
public record AppSettings(string AsmHtrTrainingGroupName,
string CleansTrainingGroupName,
string EpiProTrainingGroupName,
string BaseUrl,
string Company,
string DbConnectionString,
string EnvironmentName,
bool ShouldSendEmail,
string WorkerServiceMonInResource,
string FqaTrainingGroupName,
string MonInSite,
string NewBaseUrl,
string OldBaseUrl,
string PackagingAndLabelingTrainingGroupName,
string SiProductionTrainingGroupName,
string UserCertificationRecordsFilePath,
string WorkingDirectoryName) {
public override string ToString() {
string result = JsonSerializer.Serialize(this, AppSettingsSourceGenerationContext.Default.AppSettings);
return result;
}
public static AppSettings Get(IConfigurationRoot configurationRoot) {
AppSettings? result;
try {
#pragma warning disable IL3050, IL2026
result = configurationRoot.Get<AppSettings>() ?? throw new Exception();
#pragma warning restore IL3050, IL2026
} catch (Exception) {
List<string> paths = [];
foreach (IConfigurationProvider configurationProvider in configurationRoot.Providers) {
if (configurationProvider is not Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider jsonConfigurationProvider)
continue;
if (jsonConfigurationProvider.Source.FileProvider is not Microsoft.Extensions.FileProviders.PhysicalFileProvider physicalFileProvider)
continue;
paths.Add(physicalFileProvider.Root);
}
throw new NotSupportedException($"Not found!{Environment.NewLine}{string.Join(Environment.NewLine, paths.Distinct())}");
}
return result;
}
internal static void SetEnvironmentVariables(HostApplicationBuilder builder) {
builder.Configuration.AddUserSecrets<Program>();
AppSettings appSettings = Get(builder.Configuration);
Environment.SetEnvironmentVariable("AsmHtrTrainingGroupName", appSettings.AsmHtrTrainingGroupName);
Environment.SetEnvironmentVariable("CleansTrainingGroupName", appSettings.CleansTrainingGroupName);
Environment.SetEnvironmentVariable("EpiProTrainingGroupName", appSettings.EpiProTrainingGroupName);
Environment.SetEnvironmentVariable("FabApprovalBaseUrl", appSettings.BaseUrl);
Environment.SetEnvironmentVariable("FabApprovalDbConnectionString", appSettings.DbConnectionString);
Environment.SetEnvironmentVariable("FabApprovalEnvironmentName", appSettings.EnvironmentName);
Environment.SetEnvironmentVariable("FabApprovalShouldSendEmail", appSettings.ShouldSendEmail.ToString());
Environment.SetEnvironmentVariable("FabApprovalWorkerServiceMonInResource", appSettings.WorkerServiceMonInResource);
Environment.SetEnvironmentVariable("FqaTrainingGroupName", appSettings.FqaTrainingGroupName);
Environment.SetEnvironmentVariable("MonInSite", appSettings.MonInSite);
Environment.SetEnvironmentVariable("NewFabApprovalBaseUrl", appSettings.NewBaseUrl);
Environment.SetEnvironmentVariable("OldFabApprovalUrl", appSettings.OldBaseUrl);
Environment.SetEnvironmentVariable("PackagingAndLabelingTrainingGroupName", appSettings.PackagingAndLabelingTrainingGroupName);
Environment.SetEnvironmentVariable("SiProductionTrainingGroupName", appSettings.SiProductionTrainingGroupName);
Environment.SetEnvironmentVariable("UserCertificationRecordsFilePath", appSettings.UserCertificationRecordsFilePath);
}
internal static AppSettings LoadEnvironmentVariables() {
AppSettings result;
try {
string asmHtrTrainingGroupName = Environment.GetEnvironmentVariable("AsmHtrTrainingGroupName") ??
throw new ArgumentNullException("AsmHtrTrainingGroupName environment variable not found");
string cleansTrainingGroupName = Environment.GetEnvironmentVariable("CleansTrainingGroupName") ??
throw new ArgumentNullException("CleansTrainingGroupName environment variable not found");
string epiProTrainingGroupName = Environment.GetEnvironmentVariable("EpiProTrainingGroupName") ??
throw new ArgumentNullException("EpiProTrainingGroupName environment variable not found");
string baseUrl = Environment.GetEnvironmentVariable("FabApprovalBaseUrl") ??
throw new ArgumentNullException("FabApprovalBaseUrl environment variable not found");
string dbConnectionString = Environment.GetEnvironmentVariable("FabApprovalDbConnectionString") ??
throw new ArgumentNullException("FabApprovalDbConnectionString environment variable not found");
string environmentName = Environment.GetEnvironmentVariable("FabApprovalEnvironmentName") ??
throw new ArgumentNullException("FabApprovalEnvironmentName environment variable not found");
if (!bool.TryParse(Environment.GetEnvironmentVariable("FabApprovalShouldSendEmail"), out bool shouldSendEmail))
throw new ArgumentNullException("FabApprovalShouldSendEmail environment variable not found");
string workerServiceMonInResource = Environment.GetEnvironmentVariable("FabApprovalWorkerServiceMonInResource") ??
throw new ArgumentNullException("FabApprovalWorkerServiceMonInResource environment variable not found");
string fqaTrainingGroupName = Environment.GetEnvironmentVariable("FqaTrainingGroupName") ??
throw new ArgumentNullException("FqaTrainingGroupName environment variable not found");
string monInSite = Environment.GetEnvironmentVariable("MonInSite") ??
throw new ArgumentNullException("MonInSite environment variable not found");
string newBaseUrl = Environment.GetEnvironmentVariable("NewFabApprovalBaseUrl") ??
throw new ArgumentNullException("NewFabApprovalBaseUrl environment variable not found");
string oldBaseUrl = Environment.GetEnvironmentVariable("OldFabApprovalUrl") ??
throw new ArgumentNullException("OldFabApprovalUrl environment variable not found");
string packagingAndLabelingTrainingGroupName = Environment.GetEnvironmentVariable("PackagingAndLabelingTrainingGroupName") ??
throw new ArgumentNullException("PackagingAndLabelingTrainingGroupName environment variable not found");
string siProductionTrainingGroupName = Environment.GetEnvironmentVariable("SiProductionTrainingGroupName") ??
throw new ArgumentNullException("SiProductionTrainingGroupName environment variable not found");
string userCertificationRecordsFilePath = Environment.GetEnvironmentVariable("UserCertificationRecordsFilePath") ??
throw new ArgumentNullException("UserCertificationRecordsFilePath environment variable not found");
result = new(AsmHtrTrainingGroupName: asmHtrTrainingGroupName,
CleansTrainingGroupName: cleansTrainingGroupName,
EpiProTrainingGroupName: epiProTrainingGroupName,
BaseUrl: baseUrl,
Company: "Infineon Technologies Americas Corp.",
DbConnectionString: dbConnectionString,
EnvironmentName: environmentName,
ShouldSendEmail: shouldSendEmail,
WorkerServiceMonInResource: workerServiceMonInResource,
FqaTrainingGroupName: fqaTrainingGroupName,
MonInSite: monInSite,
NewBaseUrl: newBaseUrl,
OldBaseUrl: oldBaseUrl,
PackagingAndLabelingTrainingGroupName: packagingAndLabelingTrainingGroupName,
SiProductionTrainingGroupName: siProductionTrainingGroupName,
UserCertificationRecordsFilePath: userCertificationRecordsFilePath,
WorkingDirectoryName: "IFXApps");
} catch (Exception ex) {
NLog.LogManager.GetCurrentClassLogger().Error($"Unable to load environment variables, because {ex.Message}");
throw;
}
return result;
}
}
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(AppSettings))]
internal partial class AppSettingsSourceGenerationContext : JsonSerializerContext {
}

View File

@ -19,4 +19,4 @@ public class Approval {
public int Step { get; set; } = 1;
public string SubRoleCategoryItem { get; set; } = "";
public int TaskID { get; set; }
}
}

View File

@ -1,10 +1,10 @@
namespace FabApprovalWorkerService.Models;
public class CorrectiveAction {
public required int CANo { get; set; }
public required int CANo { get; set; }
public bool ApprovalStatus { get; set; }
public DateTime FollowUpDate { get; set; }
public DateTime ClosedDate { get; set; }
public int QAID { get; set; }
public required string CATitle { get; set; }
}
}

View File

@ -12,4 +12,4 @@ public class ECN {
public required int OriginatorID { get; set; }
public required string Title { get; set; }
public DateTime CloseDate { get; set; } = DateTime.MaxValue;
}
}

View File

@ -26,4 +26,4 @@ public class MRB {
public required string Status { get; set; }
public string Tool { get; set; } = "";
public string Category { get; set; } = string.Empty;
}
}

View File

@ -7,4 +7,4 @@ public class OOOTemp {
public required DateTime OOOStartDate { get; set; }
public required DateTime OOOExpirationDate { get; set; }
public bool Processed { get; set; } = false;
}
}

View File

@ -15,4 +15,4 @@ public class PCRB {
public DateTime InsertTimeStamp { get; set; } = DateTimeUtilities.MIN_DT;
public DateTime LastUpdateDate { get; set; } = DateTimeUtilities.MIN_DT;
public DateTime ClosedDate { get; set; } = DateTimeUtilities.MAX_DT;
}
}

View File

@ -12,5 +12,5 @@ public class TrainingAssignment {
public bool status { get; set; } = false;
public bool Deleted { get; set; } = false;
public DateTime DeletedDate { get; set; }
public DateTime LastNotification { get; set; }
}
public DateTime LastNotification { get; set; }
}

View File

@ -1,7 +1,7 @@
using Dapper.Contrib.Extensions;
namespace FabApprovalWorkerService.Models;
[Table("Users")]
[Table ("Users")]
public class User {
[Key]
public required int UserID { get; set; }
@ -16,7 +16,7 @@ public class User {
public DateTime OOOStartDate { get; set; }
public DateTime OOOExpirationDate { get; set; }
public int DelegatedTo { get; set; }
public required bool CanViewITAR { get; set; }
public required bool CanViewITAR { get; set; }
public required bool IsManager { get; set; }
public bool IsCleansCertified { get; set; } = false;
public bool IsAnyLevelCertified { get; set; } = false;
@ -25,4 +25,4 @@ public class User {
public bool IsFqaCertified { get; set; } = false;
public bool IsFqaAssessmentCertified { get; set; } = false;
public bool IsActive { get; set; } = false;
}
}

View File

@ -5,4 +5,4 @@ public class UserSubRole {
public required int UserID { get; set; }
public required int SubRoleID { get; set; }
public bool Delegated { get; set; } = false;
}
}

View File

@ -1,8 +1,4 @@
using System.Diagnostics;
using System.Net.Mail;
using FabApprovalWorkerService.Clients;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Services;
using FabApprovalWorkerService.Workers;
@ -10,6 +6,8 @@ using NLog.Extensions.Logging;
using Quartz;
using System.Net.Mail;
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Logging.ClearProviders();
@ -18,20 +16,10 @@ builder.Logging.AddNLog();
builder.Services.AddHttpClient();
if (Debugger.IsAttached) {
string? asmHtrTrainingGroupName = Environment.GetEnvironmentVariable("AsmHtrTrainingGroupName");
if (string.IsNullOrEmpty(asmHtrTrainingGroupName)) {
AppSettings.SetEnvironmentVariables(builder);
}
}
AppSettings appSettings = AppSettings.LoadEnvironmentVariables();
builder.Services.AddSingleton(_ => appSettings);
builder.Services.AddScoped<IDbConnectionService, DbConnectionService>();
builder.Services.AddScoped<IMonInClient, MonInClient>();
builder.Services.AddScoped<IDalService, DalService>();
builder.Services.AddScoped((serviceProvider) => {
builder.Services.AddScoped<SmtpClient>((serviceProvider) => {
return new SmtpClient("mailrelay-external.infineon.com");
});
builder.Services.AddScoped<ISmtpClientWrapper, SmtpClientWrapper>();
@ -138,7 +126,4 @@ builder.Services.AddHostedService<WindowsService>();
IHost app = builder.Build();
if (Debugger.IsAttached)
app.Services.GetRequiredService<IApprovalService>();
app.Run();
app.Run();

View File

@ -1,8 +1,8 @@
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Utilities;
using System.Text;
namespace FabApprovalWorkerService.Services;
public interface IApprovalService {
@ -63,4 +63,4 @@ public class ApprovalService : IApprovalService {
throw;
}
}
}
}

View File

@ -1,8 +1,8 @@
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Utilities;
using System.Text;
namespace FabApprovalWorkerService.Services;
public interface ICorrectiveActionService {
@ -106,4 +106,4 @@ public class CorrectiveActionService : ICorrectiveActionService {
throw;
}
}
}
}

View File

@ -1,6 +1,6 @@
using System.Data;
using Dapper;
using Dapper;
using System.Data;
namespace FabApprovalWorkerService.Services;
@ -86,4 +86,4 @@ public class DalService : IDalService {
return rowsAffected;
}
}
}

View File

@ -1,8 +1,7 @@
using System.Data;
using Microsoft.Data.SqlClient;
using Microsoft.Data.Sqlite;
using FabApprovalWorkerService.Models;
using Microsoft.Data.SqlClient;
using System.Data;
namespace FabApprovalWorkerService.Services;
@ -11,13 +10,17 @@ public interface IDbConnectionService {
}
public class DbConnectionService : IDbConnectionService {
private readonly string _envName;
private readonly string _dbConnectionString;
public DbConnectionService(AppSettings appSettings) {
_dbConnectionString = appSettings.DbConnectionString;
public DbConnectionService() {
_envName = Environment.GetEnvironmentVariable("FabApprovalEnvironmentName") ??
throw new ArgumentNullException("FabApprovalEnvironmentName environment variable not found");
_dbConnectionString = Environment.GetEnvironmentVariable("FabApprovalDbConnectionString") ??
throw new ArgumentNullException("FabApprovalDbConnectionString environment variable not found");
}
public IDbConnection GetConnection() {
return new SqlConnection(_dbConnectionString);
}
}
}

View File

@ -1,8 +1,8 @@
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Utilities;
using System.Text;
namespace FabApprovalWorkerService.Services;
public interface IECNService {
@ -185,4 +185,4 @@ public class ECNService : IECNService {
throw;
}
}
}
}

View File

@ -1,8 +1,8 @@
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Utilities;
using System.Text;
namespace FabApprovalWorkerService.Services;
public interface IMRBService {
@ -56,4 +56,4 @@ public class MRBService : IMRBService {
throw;
}
}
}
}

View File

@ -1,6 +1,4 @@
using FabApprovalWorkerService.Models;
using Infineon.Monitoring.MonA;
using Infineon.Monitoring.MonA;
namespace FabApprovalWorkerService.Services;
@ -15,11 +13,13 @@ public class MonInClient : IMonInClient {
private readonly string _site;
private readonly string _resource;
public MonInClient(ILogger<MonInClient> logger, AppSettings appSettings) {
public MonInClient(ILogger<MonInClient> logger) {
_logger = logger ??
throw new ArgumentNullException("ILogger not injected");
_site = appSettings.MonInSite;
_resource = appSettings.WorkerServiceMonInResource;
_site = Environment.GetEnvironmentVariable("MonInSite") ??
throw new ArgumentNullException("MonInSite environment variable not found");
_resource = Environment.GetEnvironmentVariable("FabApprovalWorkerServiceMonInResource") ??
throw new ArgumentNullException("FabApprovalWorkerServiceMonInResource environment variable not found");
}
public void PostMetric(string metricName, double metricValue) {
@ -55,4 +55,4 @@ public class MonInClient : IMonInClient {
ex.Message);
}
}
}
}

View File

@ -1,8 +1,8 @@
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Utilities;
using System.Text;
namespace FabApprovalWorkerService.Services;
public interface IPCRBService {
@ -57,4 +57,4 @@ public class PCRBService : IPCRBService {
throw;
}
}
}
}

View File

@ -1,10 +1,9 @@
using System.Net.Mail;
using FabApprovalWorkerService.Clients;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Clients;
using Microsoft.IdentityModel.Tokens;
using System.Net.Mail;
namespace FabApprovalWorkerService.Services;
public interface ISmtpService {
@ -16,19 +15,13 @@ public class SmtpService : ISmtpService {
private ISmtpClientWrapper _smtpClient;
private bool _shouldSendEmail;
public SmtpService(ILogger<SmtpService> logger,
ISmtpClientWrapper smtpClient,
AppSettings? appSettings = null) {
public SmtpService(ILogger<SmtpService> logger, ISmtpClientWrapper smtpClient) {
_logger = logger ??
throw new ArgumentNullException("ILogger not injected");
_smtpClient = smtpClient ??
throw new ArgumentNullException("SmtpClient not injected");
if (appSettings is not null)
_shouldSendEmail = appSettings.ShouldSendEmail;
else {
if (!bool.TryParse(Environment.GetEnvironmentVariable("FabApprovalShouldSendEmail"), out _shouldSendEmail))
throw new ArgumentNullException("FabApprovalShouldSendEmail environment variable not found");
}
if (!Boolean.TryParse(Environment.GetEnvironmentVariable("FabApprovalShouldSendEmail"), out _shouldSendEmail))
throw new ArgumentNullException("FabApprovalShouldSendEmail environment variable not found");
}
public async Task<bool> SendEmail(IEnumerable<MailAddress> recipients,
@ -39,7 +32,7 @@ public class SmtpService : ISmtpService {
if (ccRecipients is null) throw new ArgumentNullException("ccRecipients cannot be null!");
if (subject.IsNullOrEmpty()) throw new ArgumentNullException("subject cannot be null or empty!");
if (body.IsNullOrEmpty()) throw new ArgumentNullException("body cannot be null or empty!");
return await Task.Run(() => {
int maxRetries = 3;
int backoffSeconds = 30;
@ -83,4 +76,4 @@ public class SmtpService : ISmtpService {
return messageWasSent;
});
}
}
}

View File

@ -1,7 +1,7 @@
using System.Text;
using System.Text.Json;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Models;
using System.Text;
using System.Text.Json;
namespace FabApprovalWorkerService.Services;
@ -30,25 +30,20 @@ public class TrainingService : ITrainingService {
private readonly string _userCertRecordsFilePath;
public TrainingService(ILogger<TrainingService> logger,
IDalService dalService,
IUserService userService,
AppSettings? appSettings = null) {
public TrainingService(ILogger<TrainingService> logger, IDalService dalService, IUserService userService) {
_logger = logger ??
throw new ArgumentNullException("ILogger not injected");
_dalService = dalService ??
throw new ArgumentNullException("IDalService not injected");
_userService = userService ??
throw new ArgumentNullException("IUserService not injected");
_userCertRecordsFilePath = appSettings is not null
? appSettings.UserCertificationRecordsFilePath
: Environment.GetEnvironmentVariable("UserCertificationRecordsFilePath") ??
throw new ArgumentNullException("UserCertificationRecordsFilePath environment variable not found");
_userCertRecordsFilePath = Environment.GetEnvironmentVariable("UserCertificationRecordsFilePath") ??
throw new ArgumentNullException("UserCertificationRecordsFilePath environment variable not found");
}
public async Task DeleteDocAssignment(int trainingAssignmentId) {
if (trainingAssignmentId <= 0) throw new ArgumentException($"Invalid training assignment id: {trainingAssignmentId}");
try {
_logger.LogInformation($"Attempting to delete training doc assignments for training assignment {trainingAssignmentId}");
@ -89,7 +84,7 @@ public class TrainingService : ITrainingService {
}
public async Task DeleteTrainingAssignmentById(int trainingAssignmentId) {
if (trainingAssignmentId <= 0)
if (trainingAssignmentId <= 0)
throw new ArgumentException($"Invalid training assignment id: {trainingAssignmentId}");
try {
@ -346,4 +341,4 @@ public class TrainingService : ITrainingService {
throw;
}
}
}
}

View File

@ -1,9 +1,9 @@
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Models;
using Microsoft.IdentityModel.Tokens;
using System.Text;
namespace FabApprovalWorkerService.Services;
public interface IUserService {
@ -417,4 +417,4 @@ public class UserService : IUserService {
throw;
}
}
}
}

View File

@ -39,4 +39,4 @@ public class WindowsService : BackgroundService {
Environment.Exit(1);
}
}
}
}

View File

@ -1,13 +1,13 @@
using System.Net.Mail;
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Services;
using Infineon.Monitoring.MonA;
using Quartz;
using System.Net.Mail;
using System.Text;
namespace FabApprovalWorkerService.Workers;
public class ApprovalNotificationWorker : IJob {
@ -31,8 +31,7 @@ public class ApprovalNotificationWorker : IJob {
IPCRBService pcrbService,
ISmtpService smtpService,
IMonInClient monInClient,
IUserService userService,
AppSettings appSettings) {
IUserService userService) {
_logger = logger ?? throw new ArgumentNullException("ILogger not injected");
_approvalService = approvalService ?? throw new ArgumentNullException("IApprovalService not injected");
_ecnService = ecnService ?? throw new ArgumentNullException("IECNService not injected");
@ -42,8 +41,10 @@ public class ApprovalNotificationWorker : IJob {
_smtpService = smtpService ?? throw new ArgumentNullException("ISmtpService not injected");
_monInClient = monInClient ?? throw new ArgumentNullException("IMonInClient not injected");
_userService = userService ?? throw new ArgumentNullException("IUserService not injected");
_oldFabApprovalBaseUrl = appSettings.OldBaseUrl;
_newFabApprovalBaseUrl = appSettings.NewBaseUrl;
_oldFabApprovalBaseUrl = Environment.GetEnvironmentVariable("OldFabApprovalUrl") ??
throw new ArgumentNullException("OldFabApprovalUrl environment variable not found");
_newFabApprovalBaseUrl = Environment.GetEnvironmentVariable("NewFabApprovalBaseUrl") ??
throw new ArgumentNullException("NewFabApprovalBaseUrl environment variable not found");
}
public async Task Execute(IJobExecutionContext context) {
@ -115,8 +116,8 @@ public class ApprovalNotificationWorker : IJob {
if (issueAndUserIds.Contains($"{approval.IssueID}{approval.UserID}")) {
approval.NotifyDate = DateTime.Now;
await _approvalService.UpdateApproval(approval);
} else if ((isEcn || isCa || isMrb || isPcrb) &&
!string.IsNullOrWhiteSpace(title) &&
} else if ((isEcn || isCa || isMrb || isPcrb) &&
!string.IsNullOrWhiteSpace(title) &&
!string.IsNullOrWhiteSpace(url) &&
!issueAndUserIds.Contains($"{approval.IssueID}{approval.UserID}")) {
@ -166,4 +167,4 @@ public class ApprovalNotificationWorker : IJob {
}
}
}
}
}

View File

@ -1,13 +1,13 @@
using System.Net.Mail;
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Services;
using Infineon.Monitoring.MonA;
using Quartz;
using System.Net.Mail;
using System.Text;
namespace FabApprovalWorkerService.Workers;
public class CAFollowUpWorker : IJob {
@ -22,14 +22,14 @@ public class CAFollowUpWorker : IJob {
ICorrectiveActionService caService,
IUserService userService,
ISmtpService smtpService,
IMonInClient monInClient,
AppSettings appSettings) {
IMonInClient monInClient) {
_logger = logger ?? throw new ArgumentNullException("ILogger not injected");
_caService = caService ?? throw new ArgumentNullException("ICorrectiveActionService not injected");
_userService = userService ?? throw new ArgumentNullException("IUserService not injected");
_smtpService = smtpService ?? throw new ArgumentNullException("ISmtpService not injected");
_monInClient = monInClient ?? throw new ArgumentNullException("IMonInClient not injected");
_baseUrl = appSettings.BaseUrl;
_baseUrl = Environment.GetEnvironmentVariable("FabApprovalBaseUrl") ??
throw new ArgumentNullException("FabApprovalBaseUrl environment variable not found");
}
public async Task Execute(IJobExecutionContext context) {
@ -45,7 +45,7 @@ public class CAFollowUpWorker : IJob {
.ToList();
foreach (CorrectiveAction ca in followUpCAs) {
await _caService.CreateCorrectiveActionFollowUpApproval(ca.CANo, ca.QAID);
string qaEmail = await _userService.GetUserEmail(ca.QAID);
IEnumerable<MailAddress> recipients = new List<MailAddress>() {
new MailAddress(qaEmail)
@ -84,4 +84,4 @@ public class CAFollowUpWorker : IJob {
}
}
}
}
}

View File

@ -1,5 +1,3 @@
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Services;
@ -7,12 +5,14 @@ using Infineon.Monitoring.MonA;
using Quartz;
using System.Text;
namespace FabApprovalWorkerService.Workers;
public class CertificationTrainingGroupWorker : IJob {
private static readonly int MAX_RETRIES = 3;
private static readonly int BACKOFF_SECONDS = 30;
private readonly ILogger<CertificationTrainingGroupWorker> _logger;
private readonly ITrainingService _trainingService;
private readonly IUserService _userService;
@ -26,20 +26,25 @@ public class CertificationTrainingGroupWorker : IJob {
private readonly string _packagingAndLabelingTrainingGroupName;
public CertificationTrainingGroupWorker(ILogger<CertificationTrainingGroupWorker> logger,
ITrainingService trainingService,
IUserService userService,
IMonInClient monInClient,
AppSettings appSettings) {
ITrainingService trainingService,
IUserService userService,
IMonInClient monInClient) {
_logger = logger ?? throw new ArgumentNullException("ILogger not injected");
_trainingService = trainingService ?? throw new ArgumentNullException("ITrainingService not injected");
_userService = userService ?? throw new ArgumentNullException("IUserService not injected");
_monInClient = monInClient ?? throw new ArgumentNullException("IMonInClient not injected");
_fqaTrainingGroupName = appSettings.FqaTrainingGroupName;
_asmHtrTrainingGroupName = appSettings.AsmHtrTrainingGroupName;
_cleansTrainingGroupName = appSettings.CleansTrainingGroupName;
_epiProTrainingGroupName = appSettings.EpiProTrainingGroupName;
_siProductionGroupName = appSettings.SiProductionTrainingGroupName;
_packagingAndLabelingTrainingGroupName = appSettings.PackagingAndLabelingTrainingGroupName;
_siProductionGroupName = Environment.GetEnvironmentVariable("SiProductionTrainingGroupName") ??
throw new ArgumentNullException("SiProductionTrainingGroupName environment variable not found");
_asmHtrTrainingGroupName = Environment.GetEnvironmentVariable("AsmHtrTrainingGroupName") ??
throw new ArgumentNullException("AsmHtrTrainingGroupName environment variable not found");
_cleansTrainingGroupName = Environment.GetEnvironmentVariable("CleansTrainingGroupName") ??
throw new ArgumentNullException("CleansTrainingGroupName environment variable not found");
_epiProTrainingGroupName = Environment.GetEnvironmentVariable("EpiProTrainingGroupName") ??
throw new ArgumentNullException("EpiProTrainingGroupName environment variable not found");
_fqaTrainingGroupName = Environment.GetEnvironmentVariable("FqaTrainingGroupName") ??
throw new ArgumentNullException("FqaTrainingGroupName environment variable not found");
_packagingAndLabelingTrainingGroupName = Environment.GetEnvironmentVariable("PackagingAndLabelingTrainingGroupName") ??
throw new ArgumentNullException("PackagingAndLabelingTrainingGroupName environment variable not found");
}
public async Task Execute(IJobExecutionContext context) {

View File

@ -1,12 +1,12 @@
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Services;
using Infineon.Monitoring.MonA;
using Quartz;
using System.Text;
namespace FabApprovalWorkerService.Workers;
public sealed class ExpiredOOOStatusWorker : IJob {
@ -43,7 +43,7 @@ public sealed class ExpiredOOOStatusWorker : IJob {
List<User> expiredOOOUsers = await _userService.GetAllExpiredOOOUsersAsync();
_logger.LogInformation($"There are {expiredOOOUsers.Count()} OOO users expiring");
foreach (User user in expiredOOOUsers) {
bool approvalsRemoved = await _userService.RemoveDelegatedApprovalsForUser(user.UserID, user.DelegatedTo);
bool subRolesRemoved = await _userService.RemoveDelegatedUserSubRoles(user.UserID, user.DelegatedTo);
@ -61,7 +61,7 @@ public sealed class ExpiredOOOStatusWorker : IJob {
errMsgBuilder.Append($"OOO flag removed: {oooFlagRemoved}");
throw new Exception(errMsgBuilder.ToString());
}
}
}
} catch (Exception ex) {
StringBuilder errMsgBuilder = new();
errMsgBuilder.Append("An exception occurred when attempting to remove OOO status for users with OOO expired ");
@ -80,4 +80,4 @@ public sealed class ExpiredOOOStatusWorker : IJob {
}
}
}
}
}

View File

@ -1,13 +1,14 @@
using System.Net.Mail;
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Services;
using Infineon.Monitoring.MonA;
using Quartz;
using System.Net.Mail;
using System.Text;
namespace FabApprovalWorkerService.Workers;
public class ExpiredTECNWorker : IJob {
private readonly ILogger<ExpiredTECNWorker> _logger;
@ -23,8 +24,7 @@ public class ExpiredTECNWorker : IJob {
ITrainingService trainingService,
IUserService userService,
ISmtpService smtpService,
IMonInClient monInClient,
AppSettings appSettings) {
IMonInClient monInClient) {
_logger = logger ??
throw new ArgumentNullException("ILogger not injected");
_ecnService = ecnService ??
@ -37,7 +37,8 @@ public class ExpiredTECNWorker : IJob {
throw new ArgumentNullException("ISmtpService not injected");
_monInClient = monInClient ??
throw new ArgumentNullException("IMonInClient not injected");
_baseUrl = appSettings.BaseUrl;
_baseUrl = Environment.GetEnvironmentVariable("FabApprovalBaseUrl") ??
throw new ArgumentNullException("FabApprovalBaseUrl environment variable not found");
}
public async Task Execute(IJobExecutionContext context) {
@ -60,14 +61,14 @@ public class ExpiredTECNWorker : IJob {
foreach (ECN ecn in expiredEcns) {
List<int> trainingIds = (await _trainingService.GetTrainingIdsForECN(ecn.ECNNumber)).ToList();
foreach (int trainingId in trainingIds) {
await _trainingService.DeleteTrainingAssignmentsByTrainingId(trainingId);
List<int> trainingAssignmentIds =
List<int> trainingAssignmentIds =
(await _trainingService.GetTrainingAssignmentIdsForTraining(trainingId)).ToList();
foreach (int assignmentId in trainingAssignmentIds) {
foreach (int assignmentId in trainingAssignmentIds) {
await _trainingService.DeleteDocAssignment(assignmentId);
}
@ -75,8 +76,8 @@ public class ExpiredTECNWorker : IJob {
}
string recipientEmail = await _userService.GetUserEmail(ecn.OriginatorID);
List<MailAddress> recipientEamils = new List<MailAddress>() {
new MailAddress(recipientEmail)
List<MailAddress> recipientEamils = new List<MailAddress>() {
new MailAddress(recipientEmail)
};
string subject = "Notice of Expired TECN";
@ -107,4 +108,4 @@ public class ExpiredTECNWorker : IJob {
}
}
}
}
}

View File

@ -1,13 +1,13 @@
using System.Net.Mail;
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Services;
using Infineon.Monitoring.MonA;
using Quartz;
using System.Net.Mail;
using System.Text;
namespace FabApprovalWorkerService.Workers;
public class ExpiringTECNWorker : IJob {
@ -22,8 +22,7 @@ public class ExpiringTECNWorker : IJob {
IMonInClient monInClient,
IUserService userService,
IECNService ecnService,
ISmtpService smtpService,
AppSettings appSettings) {
ISmtpService smtpService) {
_logger = logger ??
throw new ArgumentNullException("ILogger not injected");
_monInClient = monInClient ??
@ -34,7 +33,8 @@ public class ExpiringTECNWorker : IJob {
throw new ArgumentNullException("IECNService not injected");
_smtpService = smtpService ??
throw new ArgumentNullException("ISmtpService not injected");
_baseUrl = appSettings.BaseUrl;
_baseUrl = Environment.GetEnvironmentVariable("FabApprovalBaseUrl") ??
throw new ArgumentNullException("FabApprovalBaseUrl environment variable not found");
}
public async Task Execute(IJobExecutionContext context) {
@ -57,8 +57,8 @@ public class ExpiringTECNWorker : IJob {
foreach (ECN eCN in expiringTECNs) {
string recipientEmail = await _userService.GetUserEmail(eCN.OriginatorID);
MailAddress recipientAddress = new MailAddress(recipientEmail);
List<MailAddress> recipientList = new() { recipientAddress };
List<MailAddress> recipientList = new () { recipientAddress };
List<MailAddress> ccRecipientList = new();
foreach (string email in tecnNotificationUserEmails) {
ccRecipientList.Add(new MailAddress(email));
@ -94,4 +94,4 @@ public class ExpiringTECNWorker : IJob {
}
}
}
}
}

View File

@ -1,12 +1,12 @@
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Services;
using Infineon.Monitoring.MonA;
using Quartz;
using System.Text;
namespace FabApprovalWorkerService.Workers;
public sealed class PendingOOOStatusWorker : IJob {
@ -43,7 +43,7 @@ public sealed class PendingOOOStatusWorker : IJob {
List<OOOTemp> pendingOOOUsers = await _userService.GetAllPendingOOOUsersAsync();
_logger.LogInformation($"There are {pendingOOOUsers.Count()} pending OOO users");
foreach (OOOTemp oooTemp in pendingOOOUsers) {
bool userAlreadyOOO = await _userService.IsUserAlreadyOOO(oooTemp.OOOUserID);
bool delegateAlreadyADelegate = await _userService.IsDelegatorAlreadyDelegatedTo(oooTemp.DelegatedTo);
@ -84,4 +84,4 @@ public sealed class PendingOOOStatusWorker : IJob {
}
}
}
}
}

View File

@ -1,13 +1,13 @@
using System.Net.Mail;
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Services;
using Infineon.Monitoring.MonA;
using Quartz;
using System.Net.Mail;
using System.Text;
namespace FabApprovalWorkerService.Workers;
public class TrainingNotificationWorker : IJob {
@ -24,15 +24,15 @@ public class TrainingNotificationWorker : IJob {
IUserService userService,
IECNService ecnService,
ISmtpService smtpService,
IMonInClient monInClient,
AppSettings appSettings) {
IMonInClient monInClient) {
_logger = logger ?? throw new ArgumentNullException("ILogger not injected");
_trainingService = trainingService ?? throw new ArgumentNullException("ITrainingService not injected");
_userService = userService ?? throw new ArgumentNullException("IUserService not injected");
_ecnService = ecnService ?? throw new ArgumentNullException("IECNService not injected");
_smtpService = smtpService ?? throw new ArgumentNullException("ISmtpService not injected");
_monInClient = monInClient ?? throw new ArgumentNullException("IMonInClient not injected");
_baseUrl = appSettings.BaseUrl;
_baseUrl = Environment.GetEnvironmentVariable("FabApprovalBaseUrl") ??
throw new ArgumentNullException("FabApprovalBaseUrl environment variable not found");
}
public async Task Execute(IJobExecutionContext context) {
@ -67,7 +67,7 @@ public class TrainingNotificationWorker : IJob {
_logger.LogInformation($"User {user.UserID} is inactive. Cancelling all training.");
IEnumerable<int> userTrainingAssignmentIds = await _trainingService.GetTrainingAssignmentIdsByUserId(user.UserID);
foreach (int trainingAssignmentId in userTrainingAssignmentIds) {
await _trainingService.DeleteTrainingAssignmentById(trainingAssignmentId);
await _trainingService.DeleteDocAssignment(trainingAssignmentId);
@ -124,7 +124,7 @@ public class TrainingNotificationWorker : IJob {
};
IEnumerable<MailAddress> ccRecipients = new List<MailAddress>();
StringBuilder bodyBuilder = new();
bodyBuilder.Append("Hello, you have open training assignments in Fab Approval. This is a reminder to ");
bodyBuilder.Append("finish your training assignments. <br /> View your open training assignments ");
@ -134,4 +134,4 @@ public class TrainingNotificationWorker : IJob {
await _smtpService.SendEmail(recipients, ccRecipients, subject, bodyBuilder.ToString());
}
}
}

View File

@ -0,0 +1,3 @@
{
}

View File

@ -0,0 +1,3 @@
{
}

View File

@ -19,7 +19,7 @@ insert_final_newline = false
# Organize usings
dotnet_separate_import_directive_groups = true
dotnet_sort_system_directives_first = true
dotnet_sort_system_directives_first = false
file_header_template = unset
# this. and Me. preferences
@ -278,10 +278,9 @@ dotnet_diagnostic.IDE0052.severity = none # "Private member can be removed
dotnet_diagnostic.IDE0270.severity = none # Null check can be simplified
dotnet_diagnostic.IDE0290.severity = none # Use primary constructor
dotnet_diagnostic.IDE1006.severity = none # Naming rule violation: These words must begin with upper case characters
dotnet_diagnostic.IDE2000.severity = error # IDE2000: Allow multiple blank lines
dotnet_diagnostic.NUnit2001.severity = none # Consider using the constraint model, Assert.That(expr, Is.False), instead of the classic model
dotnet_diagnostic.NUnit2004.severity = none # Consider using the constraint model
dotnet_diagnostic.NUnit2010.severity = none # Use Is.EqualTo constraint instead of direct comparison for better assertion messages in ca
dotnet_style_coalesce_expression = false
dotnet_style_object_initializer = false
dotnet_style_prefer_conditional_expression_over_return = false
dotnet_style_prefer_conditional_expression_over_return = false

View File

@ -1,5 +0,0 @@
# mklink
```bash 1731705389065 = 638673021890650000 = Fri Nov 15 2024 14:16:28 GMT-0700 (Mountain Standard Time)
mklink /J "L:\DevOps\Mesa_FI\FabApprovalWorkerService\FabApprovalWorkerServiceTests\.vscode\.UserSecrets" "C:\Users\phares\AppData\Roaming\Microsoft\UserSecrets\f445e6e0-784b-4dde-9ef0-2143e6e90b1b"
```

View File

@ -1,424 +1,23 @@
{
"[markdown]": {
"editor.wordWrap": "off"
},
"files.exclude": {
"**/.git": false,
"**/node_modules": true
},
"files.watcherExclude": {
"**/node_modules": true
},
"cSpell.words": [
"abutton",
"accessibilities",
"accodingly",
"acknowledgmentby",
"Acks",
"actionsheet",
"Additonal",
"Addtional",
"againm",
"agendaview",
"Antlr",
"Appover",
"Appprrovers",
"Approvalog",
"Aprovers",
"Aproverslist",
"asax",
"aspnetmvc",
"Assignedto",
"Atachments",
"Attachemnt",
"Attachemnts",
"Attchment",
"auditee",
"Auditee",
"Auditees",
"automaically",
"Autthorized",
"beacuase",
"beforeunload",
"Belguim",
"bfound",
"bgcolor",
"Bies",
"binded",
"blackbackground",
"blackhover",
"blackpressed",
"blueenergy",
"blueopal",
"buttongroup",
"BYMRB",
"bytesgot",
"CAID",
"casection",
"CAXXXX",
"CCPCR",
"CCPCRB",
"cellspacing",
"Cheeso's",
"chkbx",
"Clib",
"colorpicker",
"columnmenu",
"columnsreorder",
"columnsresize",
"comming",
"Containmen",
"Copmments",
"correctiv",
"Correctivet",
"Creat",
"currentd",
"Cyle",
"dadada",
"darkbluehover",
"darkbluepressed",
"darkred",
"datafields",
"datasource",
"dataviz",
"datepicker",
"datetimepicker",
"dayview",
"Deletet",
"Delgation",
"DENITED",
"Deparmtent",
"departmentids",
"Descirption",
"devprog",
"dfeffc",
"Disp",
"Dispo",
"Dispoitio",
"Dispos",
"Dispositon",
"Dispostion",
"Dispostions",
"dispotypevalidation",
"Docbase",
"Documentum",
"Documetum",
"dont",
"downlaoded",
"draganddrop",
"dragcancel",
"dropdownlist",
"Eamils",
"ECNPCRB",
"Ecns",
"edmx",
"EECN",
"emai",
"emailparams",
"Emergrncy",
"energyblue",
"Eran",
"Esql",
"ETECN",
"EXCELOPENXML",
"existinglocation",
"Expando",
"extrafield",
"fadc",
"fbec",
"fcfdfd",
"fdff",
"fece",
"feeebd",
"ffdc",
"ffdd",
"fieldset",
"FILIPE",
"filtermenu",
"Fldr",
"flintstone",
"FLOWLOCS",
"FMEA",
"ftplib",
"FTPSPN",
"GETDATE",
"gitea",
"globaldocudms",
"glyphicons",
"groupable",
"Guids",
"halflings",
"Hexsize",
"highcontrast",
"Hmac",
"holdsteps",
"hostspecific",
"icenium",
"IECN",
"imagebrowser",
"IMRB",
"Infineon",
"Insertd",
"inverseicons",
"IPCRB",
"ISADMIN",
"islast",
"ISNULL",
"ITAR",
"jquery",
"jqueryval",
"jqwidgets",
"jqxbuttongroup",
"jqxbuttons",
"jqxcalendar",
"jqxchart",
"jqxcheckbox",
"jqxcolorpicker",
"jqxcombobox",
"jqxcore",
"jqxdata",
"jqxdatatable",
"jqxdatetimeinput",
"jqxdocking",
"jqxdockpanel",
"jqxdragdrop",
"jqxdropdownbutton",
"jqxdropdownlist",
"jqxexpander",
"jqxgauge",
"jqxgrid",
"jqxinput",
"jqxknockout",
"jqxlistbox",
"jqxlistmenu",
"jqxmaskedinput",
"jqxmenu",
"jqxnavigationbar",
"jqxnumberinput",
"jqxpanel",
"jqxpasswordinput",
"jqxprogressbar",
"jqxradiobutton",
"jqxrangeselector",
"jqxrating",
"jqxresponse",
"jqxscrollbar",
"jqxscrollview",
"jqxslider",
"jqxsplitter",
"jqxswitchbutton",
"jqxtabs",
"jqxtooltip",
"jqxtouch",
"jqxtree",
"jqxtreegrid",
"jqxtreemap",
"jqxvalidator",
"jqxwindow",
"kendogridcustom",
"kendoui",
"labelelement",
"labelledby",
"Leanred",
"lightgray",
"linkbutton",
"Linq",
"Listdiv",
"listview",
"Lnks",
"localfilename",
"loclist",
"logis",
"logtext",
"loopmis",
"lotdispo",
"LOTDISPSITION",
"Lotfile",
"lotlist",
"lotstatusoption",
"LTRIM",
"MADUREIRA",
"mailrelay",
"MDTM",
"meego",
"meetingid",
"menubutton",
"mesafi",
"metroblack",
"metrodark",
"miliseconds",
"modalview",
"modernizr",
"Modernizr",
"monthview",
"MRBIs",
"Mrbs",
"msecs",
"multipleextended",
"Navigatable",
"nbsp",
"newbase",
"newchange",
"newdi",
"newfilename",
"newsource",
"Newtonsoft",
"notications",
"Notifcation",
"Notifyf",
"NTLM",
"Nullcc",
"numerictextbox",
"objdata",
"OCAP",
"occured",
"odata",
"oldfilename",
"OLHOLD",
"onclick",
"onmousemove",
"OPDESC",
"OPENQUERY",
"Oper",
"operationslist",
"Orginator",
"Originatorname",
"Ouellette",
"Owin",
"pageable",
"Pageable",
"panelbar",
"parentid",
"parminput",
"parms",
"Parms",
"particula",
"pasv",
"PASV",
"PATINDEX",
"PCRB",
"PCRBID",
"pcrvalues",
"pdbonly",
"Preventitive",
"preventivet",
"Prevetative",
"proces",
"Processedl",
"procs",
"productfamilies",
"progess",
"progressbar",
"qrcode",
"Quanityt",
"rangebar",
"Recep",
"Recepient",
"recieved",
"recordlock",
"remotefilename",
"reorderable",
"reportform",
"reportslist",
"reportslistdiv",
"Reqquired",
"Reqs",
"Requiest",
"Responsibles",
"RETR",
"Revisioing",
"Revisioned",
"Revison",
"rgba",
"rkotian",
"RNFR",
"RNTO",
"Roless",
"roundbg",
"RTRIM",
"SAMDB",
"scroller",
"scrollview",
"seleced",
"selectionlog",
"Selectpart",
"sess",
"Sfisharepoint",
"shinyblack",
"showpassword",
"SIGNON",
"simpleparser",
"slddrw",
"sldprt",
"sortasc",
"sortascbutton",
"sortdesc",
"sortdescbutton",
"sortremove",
"sparkline",
"splitview",
"SPNMRB",
"SPNPDB",
"SSRS",
"Sssign",
"Staus",
"stylesheet",
"Submited",
"subrole",
"subroles",
"Succefully",
"Succesfully",
"sucessfully",
"SURP",
"Swashbuckle",
"SWRN",
"tabindex",
"tabstrip",
"Tahoma",
"taskcompleted",
"Tasklist",
"Taveler",
"TECN",
"TECNs",
"TEMIRWAP",
"tempecd",
"tempimplement",
"templabel",
"tempvalue",
"TEMSA",
"timepicker",
"Tobe",
"Toplevel",
"Totrav",
"trainingby",
"Traininglist",
"traininglistdiv",
"transanction",
"Trav",
"Traveller",
"Traverler",
"TRAVLELER",
"Travler",
"TREEVIEW",
"trigerred",
"ttinclude",
"Uhandled",
"Updat",
"Uplaod",
"Upto",
"userevents",
"userids",
"userlist",
"Validatable",
"valueelement",
"Variabls",
"Verdana",
"vgrid",
"viewmodel",
"vsdoc",
"whethere",
"windowsphone",
"Winsock",
"worlflow"
]
"[markdown]": {
"editor.wordWrap": "off"
},
"files.exclude": {
"**/.git": false,
"**/node_modules": true
},
"files.watcherExclude": {
"**/node_modules": true
},
"cSpell.words": [
"Acks",
"DENITED",
"Ecns",
"flintstone",
"Infineon",
"ITAR",
"Nullcc",
"TECN",
"TECNs"
]
}

View File

@ -23,7 +23,7 @@
"${workspaceFolder}/FabApprovalWorkerServiceTests.csproj",
"set",
"_UserSecretsId",
"f445e6e0-784b-4dde-9ef0-2143e6e90b1b"
"0c43f9aa-96e9-4298-967c-ed069d79e262"
],
"problemMatcher": "$msCompile"
},

View File

@ -40,7 +40,7 @@ public class CorrectiveActionServiceTests {
[Test]
public async Task GetCorrectiveActionsWithFollowUpInFiveDaysShouldReturnExpectedCAs() {
IEnumerable<CorrectiveAction> expectedCAs = new List<CorrectiveAction>() {
IEnumerable<CorrectiveAction> expectedCAs = new List<CorrectiveAction>() {
new CorrectiveAction() {
CANo = 1,
CATitle = "title"
@ -98,4 +98,4 @@ public class CorrectiveActionServiceTests {
_mockDalService.Verify(d => d.ExecuteAsync(It.IsAny<string>()), Times.Once());
}
}
}

View File

@ -74,7 +74,7 @@ internal class ECNServiceTests {
[Test]
public async Task GetExpiringTECNsWithNoExtensionFromDbShouldReturnSameResults() {
IEnumerable<ECN> ecns = new List<ECN>() {
IEnumerable<ECN> ecns = new List<ECN>() {
new ECN() {
ECNNumber = 1,
OriginatorID = 1,
@ -225,7 +225,7 @@ internal class ECNServiceTests {
[Test]
public async Task GetTECNNotificationUserEmailsShouldReturnExpectedUserEmails() {
IEnumerable<string> userEmails = new List<string>() {
IEnumerable<string> userEmails = new List<string>() {
"fake1@email.com",
"fake2@email.com"
};
@ -270,7 +270,7 @@ internal class ECNServiceTests {
[Test]
public async Task GetEcnByNumberShouldReturnExpectedEcn() {
IEnumerable<ECN> expectedEcns = new List<ECN>() {
IEnumerable<ECN> expectedEcns = new List<ECN>() {
new ECN() {
ECNNumber = 1,
OriginatorID = 1,
@ -433,4 +433,4 @@ internal class ECNServiceTests {
Assert.True(isExpired);
}
}
}

View File

@ -1,13 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
<Configurations>Debug;Release;Staging</Configurations>
<UserSecretsId>f445e6e0-784b-4dde-9ef0-2143e6e90b1b</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
@ -17,10 +19,13 @@
<PackageReference Include="NUnit.Analyzers" Version="3.9.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\FabApprovalWorkerService\FabApprovalWorkerService.csproj" />
</ItemGroup>
<ItemGroup>
<Using Include="NUnit.Framework" />
</ItemGroup>
</Project>
</Project>

View File

@ -1,12 +1,12 @@
using System.Net.Mail;
using FabApprovalWorkerService.Clients;
using FabApprovalWorkerService.Clients;
using FabApprovalWorkerService.Services;
using Microsoft.Extensions.Logging;
using Moq;
using System.Net.Mail;
namespace FabApprovalWorkerServiceTests;
internal class SmtpServiceTests {
private static readonly List<MailAddress> ADDRESS_LIST = new List<MailAddress>() {
@ -48,7 +48,7 @@ internal class SmtpServiceTests {
_smtpService = new SmtpService(_mockLogger.Object, _mockSmtpClient.Object);
Assert.ThrowsAsync<ArgumentNullException>(async Task () => {
await _smtpService.SendEmail(new List<MailAddress>(), ADDRESS_LIST, "subject", "body");
await _smtpService.SendEmail(new List<MailAddress> (), ADDRESS_LIST, "subject", "body");
});
}
@ -100,13 +100,13 @@ internal class SmtpServiceTests {
[Test]
public async Task SendEmailWithValidArgsShouldSendMailThroughClient() {
_smtpService = new SmtpService(_mockLogger.Object, _mockSmtpClient.Object);
Assert.True(await _smtpService.SendEmail(ADDRESS_LIST, ADDRESS_LIST, "subject", "body"));
bool shouldSendEmail = false;
bool.TryParse(Environment.GetEnvironmentVariable("FabApprovalShouldSendEmail"), out shouldSendEmail);
Boolean.TryParse(Environment.GetEnvironmentVariable("FabApprovalShouldSendEmail"), out shouldSendEmail);
if (shouldSendEmail)
_mockSmtpClient.Verify(s => s.Send(It.IsAny<MailMessage>()));
}
}
}

View File

@ -156,7 +156,7 @@ public class TrainingServiceTests {
public void MarkTrainingAsCompleteWithInvalidIdShouldThrowException() {
_trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object, _mockUserService.Object);
Assert.ThrowsAsync<ArgumentException>(async Task () => await _trainingService.MarkTrainingAsComplete(-1));
Assert.ThrowsAsync<ArgumentException>(async Task() => await _trainingService.MarkTrainingAsComplete(-1));
}
[Test]
@ -181,7 +181,7 @@ public class TrainingServiceTests {
[Test]
public async Task GetActiveTrainingAssignmentsShouldReturnExpectedAssignments() {
IEnumerable<TrainingAssignment> expectedAssignments = new List<TrainingAssignment>() {
IEnumerable<TrainingAssignment> expectedAssignments = new List<TrainingAssignment>() {
new TrainingAssignment() {
ID = 1,
TrainingID = 1,
@ -217,7 +217,7 @@ public class TrainingServiceTests {
_trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object, _mockUserService.Object);
Assert.ThrowsAsync<Exception>(async Task () => await _trainingService.GetActiveTrainingAssignments());
Assert.ThrowsAsync<Exception>(async Task() => await _trainingService.GetActiveTrainingAssignments());
}
[Test]
@ -341,4 +341,4 @@ public class TrainingServiceTests {
Assert.That(expectedIds, Is.EquivalentTo(actualIds));
}
}
}

View File

@ -77,9 +77,9 @@ internal class UserServiceTests {
_userService = new UserService(MOCK_LOGGER, _mockDalService.Object);
Assert.ThrowsAsync<Exception>(async Task () => await _userService.GetAllExpiredOOOUsersAsync());
Assert.ThrowsAsync<Exception>(async Task() => await _userService.GetAllExpiredOOOUsersAsync());
}
[Test]
public async Task GetAllExpiredOOOUsersShouldReturnMockUsers() {
_mockDalService.Setup(d => d.QueryAsync<User>(It.IsAny<string>())).Returns(Task.FromResult(MOCK_USERS));
@ -99,7 +99,7 @@ internal class UserServiceTests {
Assert.ThrowsAsync<Exception>(async Task () => await _userService.GetAllPendingOOOUsersAsync());
}
[Test]
public async Task GetAllPendingOOOUsersShouldReturnMockOOOTemps() {
_mockDalService.Setup(d => d.QueryAsync<OOOTemp>(It.IsAny<string>())).Returns(Task.FromResult(MOCK_OOO_TEMPS));
@ -157,7 +157,7 @@ internal class UserServiceTests {
_userService = new UserService(MOCK_LOGGER, _mockDalService.Object);
Assert.ThrowsAsync<Exception>(async Task () => await _userService.IsDelegatorAlreadyDelegatedTo(2));
Assert.ThrowsAsync<Exception>(async Task() => await _userService.IsDelegatorAlreadyDelegatedTo(2));
}
[Test]
@ -195,7 +195,7 @@ internal class UserServiceTests {
[Test]
public async Task InsertDelegatedRolesWithValidUserIdShouldReturnTrue() {
IEnumerable<UserSubRole> userSubRoles = new List<UserSubRole>() {
IEnumerable<UserSubRole> userSubRoles = new List<UserSubRole>() {
new UserSubRole() {
UserSubRoleID = 1,
UserID = 1,
@ -274,7 +274,7 @@ internal class UserServiceTests {
[Test]
public async Task RemoveDelegatedUserSubRolesWithValidParamsShouldReturnTrue() {
IEnumerable<int> roleIds = new List<int>() { 1, 2 };
IEnumerable<int> roleIds = new List<int>() {1, 2};
_mockDalService.Setup(d => d.QueryAsync<int>(It.IsAny<string>())).Returns(Task.FromResult(roleIds));
_mockDalService.Setup(d => d.ExecuteAsync(It.IsAny<string>())).Returns(Task.FromResult(1));
@ -337,7 +337,7 @@ internal class UserServiceTests {
[Test]
public async Task FlagUserAsOOOWithValidOOOTempShouldReturnTrue() {
OOOTemp oooTemp = new OOOTemp() {
OOOTemp oooTemp = new OOOTemp() {
ID = 1,
OOOUserID = 1,
OOOStartDate = DateTime.Now,
@ -434,7 +434,7 @@ internal class UserServiceTests {
public void GetUserEmailWithInvalidUserIdShouldThrowException() {
_userService = new UserService(MOCK_LOGGER, _mockDalService.Object);
Assert.ThrowsAsync<ArgumentException>(async Task () => await _userService.GetUserEmail(-1));
Assert.ThrowsAsync<ArgumentException>(async Task() => await _userService.GetUserEmail(-1));
}
[Test]
@ -443,7 +443,7 @@ internal class UserServiceTests {
_userService = new UserService(MOCK_LOGGER, _mockDalService.Object);
Assert.ThrowsAsync<Exception>(async Task () => await _userService.GetUserEmail(3));
Assert.ThrowsAsync<Exception>(async Task() => await _userService.GetUserEmail(3));
}
[Test]
@ -483,12 +483,12 @@ internal class UserServiceTests {
_mockDalService.Setup(d => d.QueryAsync<User>(It.IsAny<string>())).Returns(Task.FromResult(emptyUsers));
Assert.ThrowsAsync<Exception>(async Task () => await _userService.GetUserById(5));
Assert.ThrowsAsync<Exception>(async Task() => await _userService.GetUserById(5));
}
[Test]
public async Task GetUserByIdShouldReturnExpectedUser() {
IEnumerable<User> expectedUsers = new List<User>() {
IEnumerable<User> expectedUsers = new List<User>() {
new User() {
UserID = 1,
LoginID = "id",