From 44eae7956fd20d644bf236830b1668af4f8058c0 Mon Sep 17 00:00:00 2001
From: Ashwini Karke <v-akarke@microsoft.com>
Date: Wed, 24 Apr 2024 17:35:04 +0530
Subject: [PATCH 1/3] Added test cases for Application

---
 .../Get-EntraApplication.Tests.ps1            | 36 +++++++++++++++++++
 .../New-EntraApplication.Tests.ps1            | 28 +++++++++++++++
 .../Set-EntraApplication.Tests.ps1            | 34 ++++++++++++++++++
 test/module/Entra/Integration/setenv.ps1      |  3 ++
 4 files changed, 101 insertions(+)
 create mode 100644 test/module/Entra/Integration/Get-EntraApplication.Tests.ps1
 create mode 100644 test/module/Entra/Integration/New-EntraApplication.Tests.ps1
 create mode 100644 test/module/Entra/Integration/Set-EntraApplication.Tests.ps1
 create mode 100644 test/module/Entra/Integration/setenv.ps1

diff --git a/test/module/Entra/Integration/Get-EntraApplication.Tests.ps1 b/test/module/Entra/Integration/Get-EntraApplication.Tests.ps1
new file mode 100644
index 0000000000..199acea382
--- /dev/null
+++ b/test/module/Entra/Integration/Get-EntraApplication.Tests.ps1
@@ -0,0 +1,36 @@
+Describe "The Get-EntraApplication command executing unmocked" {
+
+    Context "When getting applications" {
+        BeforeAll {
+            $testReportPath = join-path $psscriptroot "\setenv.ps1"
+            Import-Module -Name $testReportPath
+            $appId = $env:TEST_APPID
+            $tenantId = $env:TEST_TENANTID
+            $cert = $env:CERTIFICATETHUMBPRINT
+            Connect-Entra -TenantId $tenantId  -AppId $appId -CertificateThumbprint $cert
+
+            $thisTestInstanceId = New-Guid | select -expandproperty guid
+            $testAppName = 'SimpleTestAppRead' + $thisTestInstanceId
+            $testApp = New-EntraApplication -DisplayName $testAppName
+        }
+
+        It "should successfully read the application with expected properties when the application ID parameter is used" {
+            $app = Get-EntraApplication -ObjectId $testApp.Id
+            $app.Id | Should -Be $testApp.Id
+            $app.DisplayName | Should -Be $testAppName
+        }
+
+        It "should throw an exception if a nonexistent object ID parameter is specified" {
+            $Id = (New-Guid).Guid
+            Get-EntraApplication -ObjectId $Id -ErrorAction Stop
+            $Error[0] | Should -match "Resource '([^']+)' does not exist"
+        }
+
+        AfterAll {
+            foreach ($app in (Get-EntraApplication -All $true | Where-Object { $_.DisplayName -eq $testAppName})) {
+                Remove-EntraApplication -ObjectId $app.Id | Out-Null
+            }
+            
+        }
+    }
+}
diff --git a/test/module/Entra/Integration/New-EntraApplication.Tests.ps1 b/test/module/Entra/Integration/New-EntraApplication.Tests.ps1
new file mode 100644
index 0000000000..ce3951bac2
--- /dev/null
+++ b/test/module/Entra/Integration/New-EntraApplication.Tests.ps1
@@ -0,0 +1,28 @@
+Describe "The Get-EntraApplication command executing unmocked" {
+
+    Context "When creating applications" {
+        BeforeAll {
+            $testReportPath = join-path $psscriptroot "\setenv.ps1"
+            Import-Module -Name $testReportPath
+            $appId = $env:TEST_APPID
+            $tenantId = $env:TEST_TENANTID
+            $cert = $env:CERTIFICATETHUMBPRINT
+            Connect-Entra -TenantId $tenantId  -AppId $appId -CertificateThumbprint $cert
+
+            $thisTestInstanceId = New-Guid | select -expandproperty guid
+        }
+
+        It "should succeed when creating a new application" {
+            $testAppName = 'SimpleTestApp' + $thisTestInstanceId
+            $newApp = New-EntraApplication -DisplayName $testAppName 
+            $newApp.DisplayName | Should -Be $testAppName
+            { Get-EntraApplication -ObjectId $newApp.Id } | Should -Not -BeNullOrEmpty
+        }
+
+        AfterAll {
+            foreach ($app in (Get-EntraApplication -All $true | Where-Object { $_.DisplayName -eq $testAppName})) {
+                Remove-EntraApplication -ObjectId $app.Id | Out-Null
+            }
+        }
+    }
+}
diff --git a/test/module/Entra/Integration/Set-EntraApplication.Tests.ps1 b/test/module/Entra/Integration/Set-EntraApplication.Tests.ps1
new file mode 100644
index 0000000000..f7a3425ed1
--- /dev/null
+++ b/test/module/Entra/Integration/Set-EntraApplication.Tests.ps1
@@ -0,0 +1,34 @@
+Describe "The Get-EntraApplication command executing unmocked" {
+
+    Context "When getting applications" {
+        BeforeAll {
+            $testReportPath = join-path $psscriptroot "\setenv.ps1"
+            Import-Module -Name $testReportPath
+            $appId = $env:TEST_APPID
+            $tenantId = $env:TEST_TENANTID
+            $cert = $env:CERTIFICATETHUMBPRINT
+            Connect-MgGraph -TenantId $tenantId  -AppId $appId -CertificateThumbprint $cert
+
+            $thisTestInstanceId = New-Guid | select -expandproperty guid
+            $testAppName = 'SimpleTestAppRead' + $thisTestInstanceId
+            $testApp = New-EntraApplication -DisplayName $testAppName
+        }
+
+        It "should successfully update the application with expected properties when the application ID parameter is used" {
+            $thisTestInstanceId = New-Guid | select -expandproperty guid
+            $newAppName = 'SimpleTestAppUpdate' + $thisTestInstanceId
+            Set-EntraApplication -ObjectId $testApp.Id -DisplayName $newAppName | Should -BeNullOrEmpty
+            
+            $app = Get-EntraApplication -ObjectId $testApp.Id
+            $app.Id | Should -Be $testApp.Id
+            $app.DisplayName | Should -Be $newAppName
+        }
+
+        AfterAll {
+            foreach ($app in (Get-EntraApplication -All $true | Where-Object { $_.DisplayName -eq $newAppName})) {
+                Remove-EntraApplication -ObjectId $app.Id | Out-Null
+            }
+            
+        }
+    }
+}
diff --git a/test/module/Entra/Integration/setenv.ps1 b/test/module/Entra/Integration/setenv.ps1
new file mode 100644
index 0000000000..819497c12e
--- /dev/null
+++ b/test/module/Entra/Integration/setenv.ps1
@@ -0,0 +1,3 @@
+$env:TEST_APPID = "8886ad7b-1795-4542-9808-c85859d97f23"
+$env:TEST_TENANTID = "d5aec55f-2d12-4442-8d2f-ccca95d4390e"
+$env:CERTIFICATETHUMBPRINT = "714CCF133715A7987BADA4E766FB3E9A1B3D8A6F"
\ No newline at end of file

From 33d224eeaf91852c473708ab9687ba10b6153a9f Mon Sep 17 00:00:00 2001
From: Ashwini Karke <v-akarke@microsoft.com>
Date: Thu, 25 Apr 2024 12:23:16 +0530
Subject: [PATCH 2/3] Integration-Testing

---
 .../Add-EntraGroupMember.Tests.ps1            | 45 +++++++++++++++++++
 1 file changed, 45 insertions(+)
 create mode 100644 test/module/Entra/Integration/Add-EntraGroupMember.Tests.ps1

diff --git a/test/module/Entra/Integration/Add-EntraGroupMember.Tests.ps1 b/test/module/Entra/Integration/Add-EntraGroupMember.Tests.ps1
new file mode 100644
index 0000000000..bc84fac5c1
--- /dev/null
+++ b/test/module/Entra/Integration/Add-EntraGroupMember.Tests.ps1
@@ -0,0 +1,45 @@
+Describe "The Get-EntraApplication command executing unmocked" {
+
+    Context "When getting applications" {
+        BeforeAll {
+            $testReportPath = join-path $psscriptroot "\setenv.ps1"
+            Import-Module -Name $testReportPath
+            $appId = $env:TEST_APPID
+            $tenantId = $env:TEST_TENANTID
+            $cert = $env:CERTIFICATETHUMBPRINT
+            Connect-Entra -TenantId $tenantId  -AppId $appId -CertificateThumbprint $cert
+
+            $thisTestInstanceId = New-Guid | select -expandproperty guid
+            $groupId = (Get-EntraGroup -Top 1).Id
+            $user = (Get-EntraUser -Top 1).Id
+            $servicePrincipal = (Get-EntraServicePrincipal -Top 1).Id
+        }
+
+        It "should successfully add user to the Group" {
+            Add-EntraGroupMember -ObjectId $groupId -RefObjectId $memberId
+            $result = Get-EntraGroupMember -ObjectId $groupId
+            $result.Id | Should -Contain $memberId
+        }
+
+        It "should successfully add service principal to the Group" {
+            Add-EntraGroupMember -ObjectId $groupId -RefObjectId $memberId
+            $result = Get-EntraGroupMember -ObjectId $servicePrincipal
+            $result.Id | Should -Contain $memberId
+        }
+
+        It "should successfully add group to the Group" {
+            Add-EntraGroupMember -ObjectId $groupId -RefObjectId $memberId
+            $result = Get-EntraGroupMember -ObjectId $servicePrincipal
+            $result.Id | Should -Contain $memberId
+        }
+        # It "should throw an exception if a nonexistent object ID parameter is specified" {
+        #     $Id = (New-Guid).Guid
+        #     Get-EntraGroupMember -ObjectId $Id -ErrorAction Stop
+        #     $Error[0] | Should -match "Resource '([^']+)' does not exist"
+        # }
+
+        AfterAll {
+            Remove-EntraGroupMember -ObjectId $groupId -MemberId $memberId
+        }
+    }
+}

From f61f184314c2e7bc62828f97169d4febfe092453 Mon Sep 17 00:00:00 2001
From: Ashwini Karke <v-akarke@microsoft.com>
Date: Thu, 25 Apr 2024 15:48:22 +0530
Subject: [PATCH 3/3] added Add-EntraGroupMember

---
 .../Add-EntraGroupMember.Tests.ps1            | 49 +++++++++----------
 .../Set-EntraApplication.Tests.ps1            |  2 +-
 2 files changed, 25 insertions(+), 26 deletions(-)

diff --git a/test/module/Entra/Integration/Add-EntraGroupMember.Tests.ps1 b/test/module/Entra/Integration/Add-EntraGroupMember.Tests.ps1
index bc84fac5c1..87c2f031b8 100644
--- a/test/module/Entra/Integration/Add-EntraGroupMember.Tests.ps1
+++ b/test/module/Entra/Integration/Add-EntraGroupMember.Tests.ps1
@@ -1,6 +1,6 @@
-Describe "The Get-EntraApplication command executing unmocked" {
+Describe "The Add-EntraGroupMember command executing unmocked" {
 
-    Context "When getting applications" {
+    Context "When getting user and group" {
         BeforeAll {
             $testReportPath = join-path $psscriptroot "\setenv.ps1"
             Import-Module -Name $testReportPath
@@ -10,36 +10,35 @@ Describe "The Get-EntraApplication command executing unmocked" {
             Connect-Entra -TenantId $tenantId  -AppId $appId -CertificateThumbprint $cert
 
             $thisTestInstanceId = New-Guid | select -expandproperty guid
-            $groupId = (Get-EntraGroup -Top 1).Id
-            $user = (Get-EntraUser -Top 1).Id
-            $servicePrincipal = (Get-EntraServicePrincipal -Top 1).Id
-        }
+            $testName = 'SimpleTest' + $thisTestInstanceId
 
-        It "should successfully add user to the Group" {
-            Add-EntraGroupMember -ObjectId $groupId -RefObjectId $memberId
-            $result = Get-EntraGroupMember -ObjectId $groupId
-            $result.Id | Should -Contain $memberId
+            #create test user 
+            $PasswordProfile = New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordProfile
+            $PasswordProfile.Password = "Pass@1234"
+            $global:newUser = New-EntraUser -AccountEnabled $true -DisplayName $testName -PasswordProfile $PasswordProfile -MailNickName $testName -UserPrincipalName "SimpleTestUser@M365x99297270.OnMicrosoft.com" 
+    
+            #create test group 
+            $global:newGroup = New-EntraGroup -DisplayName $testName -MailEnabled $false -SecurityEnabled $true -MailNickName $testName 
         }
 
-        It "should successfully add service principal to the Group" {
-            Add-EntraGroupMember -ObjectId $groupId -RefObjectId $memberId
-            $result = Get-EntraGroupMember -ObjectId $servicePrincipal
-            $result.Id | Should -Contain $memberId
-        }
+        It "should successfully add user to new created group" {
+            $user = Get-EntraUser -ObjectId $newUser.Id
+            $user.Id | Should -Be $newUser.Id
+            $user.DisplayName | Should -Be $testName
+
+            $group = Get-EntraGroup -ObjectId $newGroup.Id
+            $group.Id | Should -Be $newGroup.Id
+            $group.DisplayName | Should -Be $testName
 
-        It "should successfully add group to the Group" {
-            Add-EntraGroupMember -ObjectId $groupId -RefObjectId $memberId
-            $result = Get-EntraGroupMember -ObjectId $servicePrincipal
-            $result.Id | Should -Contain $memberId
+            Add-EntraGroupMember -ObjectId $group.Id -RefObjectId $user.Id
+            $result = Get-EntraGroupMember -ObjectId $group.Id
+            $result.Id | Should -Contain $user.Id
         }
-        # It "should throw an exception if a nonexistent object ID parameter is specified" {
-        #     $Id = (New-Guid).Guid
-        #     Get-EntraGroupMember -ObjectId $Id -ErrorAction Stop
-        #     $Error[0] | Should -match "Resource '([^']+)' does not exist"
-        # }
 
         AfterAll {
-            Remove-EntraGroupMember -ObjectId $groupId -MemberId $memberId
+            Remove-EntraGroupMember -ObjectId $newGroup.Id -MemberId $newUser.Id
+            Remove-EntraUser -ObjectId $newUser.Id
+            Remove-EntraGroup -ObjectId $newGroup.Id
         }
     }
 }
diff --git a/test/module/Entra/Integration/Set-EntraApplication.Tests.ps1 b/test/module/Entra/Integration/Set-EntraApplication.Tests.ps1
index f7a3425ed1..54574437c5 100644
--- a/test/module/Entra/Integration/Set-EntraApplication.Tests.ps1
+++ b/test/module/Entra/Integration/Set-EntraApplication.Tests.ps1
@@ -7,7 +7,7 @@ Describe "The Get-EntraApplication command executing unmocked" {
             $appId = $env:TEST_APPID
             $tenantId = $env:TEST_TENANTID
             $cert = $env:CERTIFICATETHUMBPRINT
-            Connect-MgGraph -TenantId $tenantId  -AppId $appId -CertificateThumbprint $cert
+            Connect-Entra -TenantId $tenantId  -AppId $appId -CertificateThumbprint $cert
 
             $thisTestInstanceId = New-Guid | select -expandproperty guid
             $testAppName = 'SimpleTestAppRead' + $thisTestInstanceId