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 # Organize usings
dotnet_separate_import_directive_groups = true dotnet_separate_import_directive_groups = true
dotnet_sort_system_directives_first = true dotnet_sort_system_directives_first = false
file_header_template = unset file_header_template = unset
# this. and Me. preferences # this. and Me. preferences
@ -249,39 +249,4 @@ dotnet_style_operator_placement_when_wrapping = beginning_of_line
tab_width = 4 tab_width = 4
indent_size = 4 indent_size = 4
end_of_line = crlf end_of_line = crlf
dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion 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

5
.gitignore vendored
View File

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

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 # Organize usings
dotnet_separate_import_directive_groups = true dotnet_separate_import_directive_groups = true
dotnet_sort_system_directives_first = true dotnet_sort_system_directives_first = false
file_header_template = unset file_header_template = unset
# this. and Me. preferences # this. and Me. preferences
@ -253,10 +253,8 @@ dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion
# Question # Question
csharp_style_inlined_variable_declaration = false
csharp_style_prefer_primary_constructors = 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.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.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.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.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.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.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.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.IDE0005.severity = none # Using directive is unnecessary.
dotnet_diagnostic.IDE0017.severity = none # Object initialization can be simplified 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.IDE0028.severity = none # Collection initialization can be simplified
dotnet_diagnostic.IDE0044.severity = none # Make field readonly dotnet_diagnostic.IDE0044.severity = none # Make field readonly
dotnet_diagnostic.IDE0046.severity = none # 'if' statement can be simplified 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.IDE0270.severity = none # Null check can be simplified
dotnet_diagnostic.IDE0290.severity = none # Use primary constructor 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.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_coalesce_expression = false
dotnet_style_object_initializer = 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]": { "[markdown]": {
"editor.wordWrap": "off" "editor.wordWrap": "off"
}, },
"files.exclude": { "files.exclude": {
"**/.git": false, "**/.git": false,
"**/node_modules": true "**/node_modules": true
}, },
"files.watcherExclude": { "files.watcherExclude": {
"**/node_modules": true "**/node_modules": true
}, },
"cSpell.words": [ "cSpell.words": [
"abutton", "Acks",
"accessibilities", "DENITED",
"accodingly", "Eamils",
"acknowledgmentby", "Ecns",
"Acks", "IECN",
"actionsheet", "IMRB",
"Additonal", "Infineon",
"Addtional", "IPCRB",
"againm", "ITAR",
"agendaview", "mailrelay",
"Antlr", "PCRB",
"Appover", "TECN",
"Appprrovers", "TECNs"
"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"
]
} }

View File

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

View File

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

View File

@ -4,7 +4,7 @@
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>e76dda63-1df3-422a-b758-1c057e5b1e25</UserSecretsId> <UserSecretsId>dotnet-FabApprovalWorkerService-e76dda63-1df3-422a-b758-1c057e5b1e25</UserSecretsId>
<ServerGarbageCollection>true</ServerGarbageCollection> <ServerGarbageCollection>true</ServerGarbageCollection>
<EnforceCodeStyleInBuild>True</EnforceCodeStyleInBuild> <EnforceCodeStyleInBuild>True</EnforceCodeStyleInBuild>
<Configurations>Debug;Release;Staging</Configurations> <Configurations>Debug;Release;Staging</Configurations>
@ -34,7 +34,6 @@
<PackageReference Include="Infineon.Monitoring.MonA" Version="3.0.1" /> <PackageReference Include="Infineon.Monitoring.MonA" Version="3.0.1" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="5.2.0" /> <PackageReference Include="Microsoft.Data.SqlClient" Version="5.2.0" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.2" /> <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.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" 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 int Step { get; set; } = 1;
public string SubRoleCategoryItem { get; set; } = ""; public string SubRoleCategoryItem { get; set; } = "";
public int TaskID { get; set; } public int TaskID { get; set; }
} }

View File

@ -1,10 +1,10 @@
namespace FabApprovalWorkerService.Models; namespace FabApprovalWorkerService.Models;
public class CorrectiveAction { public class CorrectiveAction {
public required int CANo { get; set; } public required int CANo { get; set; }
public bool ApprovalStatus { get; set; } public bool ApprovalStatus { get; set; }
public DateTime FollowUpDate { get; set; } public DateTime FollowUpDate { get; set; }
public DateTime ClosedDate { get; set; } public DateTime ClosedDate { get; set; }
public int QAID { get; set; } public int QAID { get; set; }
public required string CATitle { 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 int OriginatorID { get; set; }
public required string Title { get; set; } public required string Title { get; set; }
public DateTime CloseDate { get; set; } = DateTime.MaxValue; public DateTime CloseDate { get; set; } = DateTime.MaxValue;
} }

View File

@ -26,4 +26,4 @@ public class MRB {
public required string Status { get; set; } public required string Status { get; set; }
public string Tool { get; set; } = ""; public string Tool { get; set; } = "";
public string Category { get; set; } = string.Empty; 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 OOOStartDate { get; set; }
public required DateTime OOOExpirationDate { get; set; } public required DateTime OOOExpirationDate { get; set; }
public bool Processed { get; set; } = false; 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 InsertTimeStamp { get; set; } = DateTimeUtilities.MIN_DT;
public DateTime LastUpdateDate { get; set; } = DateTimeUtilities.MIN_DT; public DateTime LastUpdateDate { get; set; } = DateTimeUtilities.MIN_DT;
public DateTime ClosedDate { get; set; } = DateTimeUtilities.MAX_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 status { get; set; } = false;
public bool Deleted { get; set; } = false; public bool Deleted { get; set; } = false;
public DateTime DeletedDate { get; set; } 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; using Dapper.Contrib.Extensions;
namespace FabApprovalWorkerService.Models; namespace FabApprovalWorkerService.Models;
[Table("Users")] [Table ("Users")]
public class User { public class User {
[Key] [Key]
public required int UserID { get; set; } public required int UserID { get; set; }
@ -16,7 +16,7 @@ public class User {
public DateTime OOOStartDate { get; set; } public DateTime OOOStartDate { get; set; }
public DateTime OOOExpirationDate { get; set; } public DateTime OOOExpirationDate { get; set; }
public int DelegatedTo { 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 required bool IsManager { get; set; }
public bool IsCleansCertified { get; set; } = false; public bool IsCleansCertified { get; set; } = false;
public bool IsAnyLevelCertified { get; set; } = false; public bool IsAnyLevelCertified { get; set; } = false;
@ -25,4 +25,4 @@ public class User {
public bool IsFqaCertified { get; set; } = false; public bool IsFqaCertified { get; set; } = false;
public bool IsFqaAssessmentCertified { get; set; } = false; public bool IsFqaAssessmentCertified { get; set; } = false;
public bool IsActive { 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 UserID { get; set; }
public required int SubRoleID { get; set; } public required int SubRoleID { get; set; }
public bool Delegated { get; set; } = false; public bool Delegated { get; set; } = false;
} }

View File

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

View File

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

View File

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

View File

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

View File

@ -1,8 +1,7 @@
using System.Data; using Microsoft.Data.SqlClient;
using Microsoft.Data.Sqlite;
using FabApprovalWorkerService.Models; using System.Data;
using Microsoft.Data.SqlClient;
namespace FabApprovalWorkerService.Services; namespace FabApprovalWorkerService.Services;
@ -11,13 +10,17 @@ public interface IDbConnectionService {
} }
public class DbConnectionService : IDbConnectionService { public class DbConnectionService : IDbConnectionService {
private readonly string _envName;
private readonly string _dbConnectionString; private readonly string _dbConnectionString;
public DbConnectionService(AppSettings appSettings) { public DbConnectionService() {
_dbConnectionString = appSettings.DbConnectionString; _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() { public IDbConnection GetConnection() {
return new SqlConnection(_dbConnectionString); return new SqlConnection(_dbConnectionString);
} }
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,13 +1,13 @@
using System.Net.Mail; using FabApprovalWorkerService.Models;
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Services; using FabApprovalWorkerService.Services;
using Infineon.Monitoring.MonA; using Infineon.Monitoring.MonA;
using Quartz; using Quartz;
using System.Net.Mail;
using System.Text;
namespace FabApprovalWorkerService.Workers; namespace FabApprovalWorkerService.Workers;
public class ApprovalNotificationWorker : IJob { public class ApprovalNotificationWorker : IJob {
@ -31,8 +31,7 @@ public class ApprovalNotificationWorker : IJob {
IPCRBService pcrbService, IPCRBService pcrbService,
ISmtpService smtpService, ISmtpService smtpService,
IMonInClient monInClient, IMonInClient monInClient,
IUserService userService, IUserService userService) {
AppSettings appSettings) {
_logger = logger ?? throw new ArgumentNullException("ILogger not injected"); _logger = logger ?? throw new ArgumentNullException("ILogger not injected");
_approvalService = approvalService ?? throw new ArgumentNullException("IApprovalService not injected"); _approvalService = approvalService ?? throw new ArgumentNullException("IApprovalService not injected");
_ecnService = ecnService ?? throw new ArgumentNullException("IECNService 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"); _smtpService = smtpService ?? throw new ArgumentNullException("ISmtpService not injected");
_monInClient = monInClient ?? throw new ArgumentNullException("IMonInClient not injected"); _monInClient = monInClient ?? throw new ArgumentNullException("IMonInClient not injected");
_userService = userService ?? throw new ArgumentNullException("IUserService not injected"); _userService = userService ?? throw new ArgumentNullException("IUserService not injected");
_oldFabApprovalBaseUrl = appSettings.OldBaseUrl; _oldFabApprovalBaseUrl = Environment.GetEnvironmentVariable("OldFabApprovalUrl") ??
_newFabApprovalBaseUrl = appSettings.NewBaseUrl; 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) { public async Task Execute(IJobExecutionContext context) {
@ -115,8 +116,8 @@ public class ApprovalNotificationWorker : IJob {
if (issueAndUserIds.Contains($"{approval.IssueID}{approval.UserID}")) { if (issueAndUserIds.Contains($"{approval.IssueID}{approval.UserID}")) {
approval.NotifyDate = DateTime.Now; approval.NotifyDate = DateTime.Now;
await _approvalService.UpdateApproval(approval); await _approvalService.UpdateApproval(approval);
} else if ((isEcn || isCa || isMrb || isPcrb) && } else if ((isEcn || isCa || isMrb || isPcrb) &&
!string.IsNullOrWhiteSpace(title) && !string.IsNullOrWhiteSpace(title) &&
!string.IsNullOrWhiteSpace(url) && !string.IsNullOrWhiteSpace(url) &&
!issueAndUserIds.Contains($"{approval.IssueID}{approval.UserID}")) { !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 FabApprovalWorkerService.Models;
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Services; using FabApprovalWorkerService.Services;
using Infineon.Monitoring.MonA; using Infineon.Monitoring.MonA;
using Quartz; using Quartz;
using System.Net.Mail;
using System.Text;
namespace FabApprovalWorkerService.Workers; namespace FabApprovalWorkerService.Workers;
public class CAFollowUpWorker : IJob { public class CAFollowUpWorker : IJob {
@ -22,14 +22,14 @@ public class CAFollowUpWorker : IJob {
ICorrectiveActionService caService, ICorrectiveActionService caService,
IUserService userService, IUserService userService,
ISmtpService smtpService, ISmtpService smtpService,
IMonInClient monInClient, IMonInClient monInClient) {
AppSettings appSettings) {
_logger = logger ?? throw new ArgumentNullException("ILogger not injected"); _logger = logger ?? throw new ArgumentNullException("ILogger not injected");
_caService = caService ?? throw new ArgumentNullException("ICorrectiveActionService not injected"); _caService = caService ?? throw new ArgumentNullException("ICorrectiveActionService not injected");
_userService = userService ?? throw new ArgumentNullException("IUserService not injected"); _userService = userService ?? throw new ArgumentNullException("IUserService not injected");
_smtpService = smtpService ?? throw new ArgumentNullException("ISmtpService not injected"); _smtpService = smtpService ?? throw new ArgumentNullException("ISmtpService not injected");
_monInClient = monInClient ?? throw new ArgumentNullException("IMonInClient 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) { public async Task Execute(IJobExecutionContext context) {
@ -45,7 +45,7 @@ public class CAFollowUpWorker : IJob {
.ToList(); .ToList();
foreach (CorrectiveAction ca in followUpCAs) { foreach (CorrectiveAction ca in followUpCAs) {
await _caService.CreateCorrectiveActionFollowUpApproval(ca.CANo, ca.QAID); await _caService.CreateCorrectiveActionFollowUpApproval(ca.CANo, ca.QAID);
string qaEmail = await _userService.GetUserEmail(ca.QAID); string qaEmail = await _userService.GetUserEmail(ca.QAID);
IEnumerable<MailAddress> recipients = new List<MailAddress>() { IEnumerable<MailAddress> recipients = new List<MailAddress>() {
new MailAddress(qaEmail) 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.Models;
using FabApprovalWorkerService.Services; using FabApprovalWorkerService.Services;
@ -7,12 +5,14 @@ using Infineon.Monitoring.MonA;
using Quartz; using Quartz;
using System.Text;
namespace FabApprovalWorkerService.Workers; namespace FabApprovalWorkerService.Workers;
public class CertificationTrainingGroupWorker : IJob { public class CertificationTrainingGroupWorker : IJob {
private static readonly int MAX_RETRIES = 3; private static readonly int MAX_RETRIES = 3;
private static readonly int BACKOFF_SECONDS = 30; private static readonly int BACKOFF_SECONDS = 30;
private readonly ILogger<CertificationTrainingGroupWorker> _logger; private readonly ILogger<CertificationTrainingGroupWorker> _logger;
private readonly ITrainingService _trainingService; private readonly ITrainingService _trainingService;
private readonly IUserService _userService; private readonly IUserService _userService;
@ -26,20 +26,25 @@ public class CertificationTrainingGroupWorker : IJob {
private readonly string _packagingAndLabelingTrainingGroupName; private readonly string _packagingAndLabelingTrainingGroupName;
public CertificationTrainingGroupWorker(ILogger<CertificationTrainingGroupWorker> logger, public CertificationTrainingGroupWorker(ILogger<CertificationTrainingGroupWorker> logger,
ITrainingService trainingService, ITrainingService trainingService,
IUserService userService, IUserService userService,
IMonInClient monInClient, IMonInClient monInClient) {
AppSettings appSettings) {
_logger = logger ?? throw new ArgumentNullException("ILogger not injected"); _logger = logger ?? throw new ArgumentNullException("ILogger not injected");
_trainingService = trainingService ?? throw new ArgumentNullException("ITrainingService not injected"); _trainingService = trainingService ?? throw new ArgumentNullException("ITrainingService not injected");
_userService = userService ?? throw new ArgumentNullException("IUserService not injected"); _userService = userService ?? throw new ArgumentNullException("IUserService not injected");
_monInClient = monInClient ?? throw new ArgumentNullException("IMonInClient not injected"); _monInClient = monInClient ?? throw new ArgumentNullException("IMonInClient not injected");
_fqaTrainingGroupName = appSettings.FqaTrainingGroupName; _siProductionGroupName = Environment.GetEnvironmentVariable("SiProductionTrainingGroupName") ??
_asmHtrTrainingGroupName = appSettings.AsmHtrTrainingGroupName; throw new ArgumentNullException("SiProductionTrainingGroupName environment variable not found");
_cleansTrainingGroupName = appSettings.CleansTrainingGroupName; _asmHtrTrainingGroupName = Environment.GetEnvironmentVariable("AsmHtrTrainingGroupName") ??
_epiProTrainingGroupName = appSettings.EpiProTrainingGroupName; throw new ArgumentNullException("AsmHtrTrainingGroupName environment variable not found");
_siProductionGroupName = appSettings.SiProductionTrainingGroupName; _cleansTrainingGroupName = Environment.GetEnvironmentVariable("CleansTrainingGroupName") ??
_packagingAndLabelingTrainingGroupName = appSettings.PackagingAndLabelingTrainingGroupName; 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) { 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 FabApprovalWorkerService.Services;
using Infineon.Monitoring.MonA; using Infineon.Monitoring.MonA;
using Quartz; using Quartz;
using System.Text;
namespace FabApprovalWorkerService.Workers; namespace FabApprovalWorkerService.Workers;
public sealed class ExpiredOOOStatusWorker : IJob { public sealed class ExpiredOOOStatusWorker : IJob {
@ -43,7 +43,7 @@ public sealed class ExpiredOOOStatusWorker : IJob {
List<User> expiredOOOUsers = await _userService.GetAllExpiredOOOUsersAsync(); List<User> expiredOOOUsers = await _userService.GetAllExpiredOOOUsersAsync();
_logger.LogInformation($"There are {expiredOOOUsers.Count()} OOO users expiring"); _logger.LogInformation($"There are {expiredOOOUsers.Count()} OOO users expiring");
foreach (User user in expiredOOOUsers) { foreach (User user in expiredOOOUsers) {
bool approvalsRemoved = await _userService.RemoveDelegatedApprovalsForUser(user.UserID, user.DelegatedTo); bool approvalsRemoved = await _userService.RemoveDelegatedApprovalsForUser(user.UserID, user.DelegatedTo);
bool subRolesRemoved = await _userService.RemoveDelegatedUserSubRoles(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}"); errMsgBuilder.Append($"OOO flag removed: {oooFlagRemoved}");
throw new Exception(errMsgBuilder.ToString()); throw new Exception(errMsgBuilder.ToString());
} }
} }
} catch (Exception ex) { } catch (Exception ex) {
StringBuilder errMsgBuilder = new(); StringBuilder errMsgBuilder = new();
errMsgBuilder.Append("An exception occurred when attempting to remove OOO status for users with OOO expired "); 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 FabApprovalWorkerService.Models;
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Services; using FabApprovalWorkerService.Services;
using Infineon.Monitoring.MonA; using Infineon.Monitoring.MonA;
using Quartz; using Quartz;
using System.Net.Mail;
using System.Text;
namespace FabApprovalWorkerService.Workers; namespace FabApprovalWorkerService.Workers;
public class ExpiredTECNWorker : IJob { public class ExpiredTECNWorker : IJob {
private readonly ILogger<ExpiredTECNWorker> _logger; private readonly ILogger<ExpiredTECNWorker> _logger;
@ -23,8 +24,7 @@ public class ExpiredTECNWorker : IJob {
ITrainingService trainingService, ITrainingService trainingService,
IUserService userService, IUserService userService,
ISmtpService smtpService, ISmtpService smtpService,
IMonInClient monInClient, IMonInClient monInClient) {
AppSettings appSettings) {
_logger = logger ?? _logger = logger ??
throw new ArgumentNullException("ILogger not injected"); throw new ArgumentNullException("ILogger not injected");
_ecnService = ecnService ?? _ecnService = ecnService ??
@ -37,7 +37,8 @@ public class ExpiredTECNWorker : IJob {
throw new ArgumentNullException("ISmtpService not injected"); throw new ArgumentNullException("ISmtpService not injected");
_monInClient = monInClient ?? _monInClient = monInClient ??
throw new ArgumentNullException("IMonInClient not injected"); 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) { public async Task Execute(IJobExecutionContext context) {
@ -60,14 +61,14 @@ public class ExpiredTECNWorker : IJob {
foreach (ECN ecn in expiredEcns) { foreach (ECN ecn in expiredEcns) {
List<int> trainingIds = (await _trainingService.GetTrainingIdsForECN(ecn.ECNNumber)).ToList(); List<int> trainingIds = (await _trainingService.GetTrainingIdsForECN(ecn.ECNNumber)).ToList();
foreach (int trainingId in trainingIds) { foreach (int trainingId in trainingIds) {
await _trainingService.DeleteTrainingAssignmentsByTrainingId(trainingId); await _trainingService.DeleteTrainingAssignmentsByTrainingId(trainingId);
List<int> trainingAssignmentIds = List<int> trainingAssignmentIds =
(await _trainingService.GetTrainingAssignmentIdsForTraining(trainingId)).ToList(); (await _trainingService.GetTrainingAssignmentIdsForTraining(trainingId)).ToList();
foreach (int assignmentId in trainingAssignmentIds) { foreach (int assignmentId in trainingAssignmentIds) {
await _trainingService.DeleteDocAssignment(assignmentId); await _trainingService.DeleteDocAssignment(assignmentId);
} }
@ -75,8 +76,8 @@ public class ExpiredTECNWorker : IJob {
} }
string recipientEmail = await _userService.GetUserEmail(ecn.OriginatorID); string recipientEmail = await _userService.GetUserEmail(ecn.OriginatorID);
List<MailAddress> recipientEamils = new List<MailAddress>() { List<MailAddress> recipientEamils = new List<MailAddress>() {
new MailAddress(recipientEmail) new MailAddress(recipientEmail)
}; };
string subject = "Notice of Expired TECN"; 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 FabApprovalWorkerService.Models;
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Services; using FabApprovalWorkerService.Services;
using Infineon.Monitoring.MonA; using Infineon.Monitoring.MonA;
using Quartz; using Quartz;
using System.Net.Mail;
using System.Text;
namespace FabApprovalWorkerService.Workers; namespace FabApprovalWorkerService.Workers;
public class ExpiringTECNWorker : IJob { public class ExpiringTECNWorker : IJob {
@ -22,8 +22,7 @@ public class ExpiringTECNWorker : IJob {
IMonInClient monInClient, IMonInClient monInClient,
IUserService userService, IUserService userService,
IECNService ecnService, IECNService ecnService,
ISmtpService smtpService, ISmtpService smtpService) {
AppSettings appSettings) {
_logger = logger ?? _logger = logger ??
throw new ArgumentNullException("ILogger not injected"); throw new ArgumentNullException("ILogger not injected");
_monInClient = monInClient ?? _monInClient = monInClient ??
@ -34,7 +33,8 @@ public class ExpiringTECNWorker : IJob {
throw new ArgumentNullException("IECNService not injected"); throw new ArgumentNullException("IECNService not injected");
_smtpService = smtpService ?? _smtpService = smtpService ??
throw new ArgumentNullException("ISmtpService not injected"); 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) { public async Task Execute(IJobExecutionContext context) {
@ -57,8 +57,8 @@ public class ExpiringTECNWorker : IJob {
foreach (ECN eCN in expiringTECNs) { foreach (ECN eCN in expiringTECNs) {
string recipientEmail = await _userService.GetUserEmail(eCN.OriginatorID); string recipientEmail = await _userService.GetUserEmail(eCN.OriginatorID);
MailAddress recipientAddress = new MailAddress(recipientEmail); MailAddress recipientAddress = new MailAddress(recipientEmail);
List<MailAddress> recipientList = new() { recipientAddress }; List<MailAddress> recipientList = new () { recipientAddress };
List<MailAddress> ccRecipientList = new(); List<MailAddress> ccRecipientList = new();
foreach (string email in tecnNotificationUserEmails) { foreach (string email in tecnNotificationUserEmails) {
ccRecipientList.Add(new MailAddress(email)); 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 FabApprovalWorkerService.Services;
using Infineon.Monitoring.MonA; using Infineon.Monitoring.MonA;
using Quartz; using Quartz;
using System.Text;
namespace FabApprovalWorkerService.Workers; namespace FabApprovalWorkerService.Workers;
public sealed class PendingOOOStatusWorker : IJob { public sealed class PendingOOOStatusWorker : IJob {
@ -43,7 +43,7 @@ public sealed class PendingOOOStatusWorker : IJob {
List<OOOTemp> pendingOOOUsers = await _userService.GetAllPendingOOOUsersAsync(); List<OOOTemp> pendingOOOUsers = await _userService.GetAllPendingOOOUsersAsync();
_logger.LogInformation($"There are {pendingOOOUsers.Count()} pending OOO users"); _logger.LogInformation($"There are {pendingOOOUsers.Count()} pending OOO users");
foreach (OOOTemp oooTemp in pendingOOOUsers) { foreach (OOOTemp oooTemp in pendingOOOUsers) {
bool userAlreadyOOO = await _userService.IsUserAlreadyOOO(oooTemp.OOOUserID); bool userAlreadyOOO = await _userService.IsUserAlreadyOOO(oooTemp.OOOUserID);
bool delegateAlreadyADelegate = await _userService.IsDelegatorAlreadyDelegatedTo(oooTemp.DelegatedTo); 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 FabApprovalWorkerService.Models;
using System.Text;
using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Services; using FabApprovalWorkerService.Services;
using Infineon.Monitoring.MonA; using Infineon.Monitoring.MonA;
using Quartz; using Quartz;
using System.Net.Mail;
using System.Text;
namespace FabApprovalWorkerService.Workers; namespace FabApprovalWorkerService.Workers;
public class TrainingNotificationWorker : IJob { public class TrainingNotificationWorker : IJob {
@ -24,15 +24,15 @@ public class TrainingNotificationWorker : IJob {
IUserService userService, IUserService userService,
IECNService ecnService, IECNService ecnService,
ISmtpService smtpService, ISmtpService smtpService,
IMonInClient monInClient, IMonInClient monInClient) {
AppSettings appSettings) {
_logger = logger ?? throw new ArgumentNullException("ILogger not injected"); _logger = logger ?? throw new ArgumentNullException("ILogger not injected");
_trainingService = trainingService ?? throw new ArgumentNullException("ITrainingService not injected"); _trainingService = trainingService ?? throw new ArgumentNullException("ITrainingService not injected");
_userService = userService ?? throw new ArgumentNullException("IUserService not injected"); _userService = userService ?? throw new ArgumentNullException("IUserService not injected");
_ecnService = ecnService ?? throw new ArgumentNullException("IECNService not injected"); _ecnService = ecnService ?? throw new ArgumentNullException("IECNService not injected");
_smtpService = smtpService ?? throw new ArgumentNullException("ISmtpService not injected"); _smtpService = smtpService ?? throw new ArgumentNullException("ISmtpService not injected");
_monInClient = monInClient ?? throw new ArgumentNullException("IMonInClient 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) { public async Task Execute(IJobExecutionContext context) {
@ -67,7 +67,7 @@ public class TrainingNotificationWorker : IJob {
_logger.LogInformation($"User {user.UserID} is inactive. Cancelling all training."); _logger.LogInformation($"User {user.UserID} is inactive. Cancelling all training.");
IEnumerable<int> userTrainingAssignmentIds = await _trainingService.GetTrainingAssignmentIdsByUserId(user.UserID); IEnumerable<int> userTrainingAssignmentIds = await _trainingService.GetTrainingAssignmentIdsByUserId(user.UserID);
foreach (int trainingAssignmentId in userTrainingAssignmentIds) { foreach (int trainingAssignmentId in userTrainingAssignmentIds) {
await _trainingService.DeleteTrainingAssignmentById(trainingAssignmentId); await _trainingService.DeleteTrainingAssignmentById(trainingAssignmentId);
await _trainingService.DeleteDocAssignment(trainingAssignmentId); await _trainingService.DeleteDocAssignment(trainingAssignmentId);
@ -124,7 +124,7 @@ public class TrainingNotificationWorker : IJob {
}; };
IEnumerable<MailAddress> ccRecipients = new List<MailAddress>(); IEnumerable<MailAddress> ccRecipients = new List<MailAddress>();
StringBuilder bodyBuilder = new(); StringBuilder bodyBuilder = new();
bodyBuilder.Append("Hello, you have open training assignments in Fab Approval. This is a reminder to "); 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 "); 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()); 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 # Organize usings
dotnet_separate_import_directive_groups = true dotnet_separate_import_directive_groups = true
dotnet_sort_system_directives_first = true dotnet_sort_system_directives_first = false
file_header_template = unset file_header_template = unset
# this. and Me. preferences # 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.IDE0270.severity = none # Null check can be simplified
dotnet_diagnostic.IDE0290.severity = none # Use primary constructor 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.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.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.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_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_coalesce_expression = false
dotnet_style_object_initializer = 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]": { "[markdown]": {
"editor.wordWrap": "off" "editor.wordWrap": "off"
}, },
"files.exclude": { "files.exclude": {
"**/.git": false, "**/.git": false,
"**/node_modules": true "**/node_modules": true
}, },
"files.watcherExclude": { "files.watcherExclude": {
"**/node_modules": true "**/node_modules": true
}, },
"cSpell.words": [ "cSpell.words": [
"abutton", "Acks",
"accessibilities", "DENITED",
"accodingly", "Ecns",
"acknowledgmentby", "flintstone",
"Acks", "Infineon",
"actionsheet", "ITAR",
"Additonal", "Nullcc",
"Addtional", "TECN",
"againm", "TECNs"
"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"
]
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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