Repository: almenscorner/IntuneCD (language: python)

Issue:
Feature change summary
- New summary of changes, instead of just a count, a summary of the changes with old and new values are sent to the front end
- Report mode, if you want to send a summary of changes to the front end without actually updating the configuration in Intune, you can activate report mode when running the update using `-r` -> `IntuneCD-startupdate -r`


Discussion / hints:

Fix patch:
diff --git a/LICENSE b/LICENSE
index 39acb4b8..64251fef 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
 MIT License
 
-Copyright (c) 2022 Tobias Almén
+Copyright (c) 2023 Tobias Almén
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index 8a3004bf..4ddd9ac1 100644
--- a/README.md
+++ b/README.md
@@ -23,6 +23,10 @@ The package can also be run standalone outside a pipeline, or in one to only bac
 # Exciting news 📣
 The front end for IntuneCD has now been released. Check it out [here](https://github.com/almenscorner/intunecd-monitor)
 
+## What's new in 1.3.0
+- New summary of changes, instead of just a count, a summary of the changes with old and new values are sent to the front end
+- Report mode, if you want to send a summary of changes to the front end without actually updating the configuration in Intune, you can activate report mode when running the update using `-r` -> `IntuneCD-startupdate -r`
+
 ## What's new in 1.2.7
 - Documentation overhaul
   - The documentation module has been completely overhauled. It is now much easier to read. Below you can see a before and after example,
@@ -39,17 +43,6 @@ The front end for IntuneCD has now been released. Check it out [here](https://gi
   - All items in lists are now included, before some items were left out
 - Bug fix to Conditional Access where the backup failed if no policys exists
 
-## What's new in 1.2.0
-- Improvements to documentation
-  - If a setting within a table cell has multiple entries, they are now separated by a new line instead of just a comma
-  - Setting name is now separated, for example, `dataRoamingBlocked` will be `Data Roaming Blocked`
-- Conditional access :tada:
-  - Conditional access is now backed up, this means you will **have to add additional permissions to the Azure AD App Registration**. More information can be found under [Required Azure AD application Graph API permissions](#required-azure-ad-application-graph-api-permissions).
-  - If you do not wish to back up/update Conditional access, make sure you add it to exclusions
-    - `IntuneCD-startbackup -e ConditionalAccess`
-    - `IntuneCD-startupdate -e ConditionalAccess`
-  - Assignments are currently not updated, changes to settings on policies are detected however and updated
-
 ## I use Powershell, Do I need to learn Python?
 No.
 
diff --git a/setup.cfg b/setup.cfg
index 56ba7ed3..6a3187c3 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
 [metadata]
 name = IntuneCD
-version = 1.2.9
+version = 1.3.0
 author = Tobias Almén
 author_email = almenscorner@outlook.com
 description = Tool to backup and update configurations in Intune
diff --git a/src/IntuneCD/backup_AppProtection.py b/src/IntuneCD/backup_AppProtection.py
index dfabec04..58cc8cb6 100644
--- a/src/IntuneCD/backup_AppProtection.py
+++ b/src/IntuneCD/backup_AppProtection.py
@@ -21,42 +21,35 @@ def savebackup(path, output, exclude, token):
 
     :param path: Path to save the backup to
     :param output: Format the backup will be saved as
+    :param exclude: List of policies to exclude from the backup
     :param token: Token to use for authenticating the request
     """
     config_count = 0
     configpath = path + "/" + "App Protection/"
     data = makeapirequest(ENDPOINT, token)
 
-    assignment_responses = batch_assignment(
-        data,
-        'deviceAppManagement/',
-        '/assignments',
-        token,
-        app_protection=True)
+    assignment_responses = batch_assignment(data, "deviceAppManagement/", "/assignments", token, app_protection=True)
 
     # If profile is ManagedAppConfiguration, skip to next
-    for profile in data['value']:
-        if profile['@odata.type'] == "#microsoft.graph.targetedManagedAppConfiguration":
+    for profile in data["value"]:
+        if profile["@odata.type"] == "#microsoft.graph.targetedManagedAppConfiguration":
             continue
 
         config_count += 1
 
         if "assignments" not in exclude:
-            assignments = get_object_assignment(
-                profile['id'], assignment_responses)
+            assignments = get_object_assignment(profile["id"], assignment_responses)
             if assignments:
-                profile['assignments'] = assignments
+                profile["assignments"] = assignments
 
         profile = remove_keys(profile)
 
-        print("Backing up App Protection: " + profile['displayName'])
+        print("Backing up App Protection: " + profile["displayName"])
 
-        if 'targetedAppManagementLevels' in profile:
-            fname = clean_filename(
-                f"{profile['displayName']}_{profile['targetedAppManagementLevels']}")
+        if "targetedAppManagementLevels" in profile:
+            fname = clean_filename(f"{profile['displayName']}_{profile['targetedAppManagementLevels']}")
         else:
-            fname = clean_filename(
-                f"{profile['displayName']}_{str(profile['@odata.type'].split('.')[2])}")
+            fname = clean_filename(f"{profile['displayName']}_{str(profile['@odata.type'].split('.')[2])}")
 
         # Save App Protection as JSON or YAML depending on configured value in
         # "-o"
diff --git a/src/IntuneCD/backup_apns.py b/src/IntuneCD/backup_apns.py
index 6d6355e0..fe2a976c 100644
--- a/src/IntuneCD/backup_apns.py
+++ b/src/IntuneCD/backup_apns.py
@@ -31,10 +31,10 @@ def savebackup(path, output, token):
     if data:
         config_count += 1
         data = remove_keys(data)
-        print("Backing up Apple Push Notification: " + data['appleIdentifier'])
+        print("Backing up Apple Push Notification: " + data["appleIdentifier"])
 
         # Get filename without illegal characters
-        fname = clean_filename(data['appleIdentifier'])
+        fname = clean_filename(data["appleIdentifier"])
         # Save APNs as JSON or YAML depending on configured value in "-o"
         save_output(output, configpath, fname, data)
 
diff --git a/src/IntuneCD/backup_appConfiguration.py b/src/IntuneCD/backup_appConfiguration.py
index e34be8e7..bf936d69 100644
--- a/src/IntuneCD/backup_appConfiguration.py
+++ b/src/IntuneCD/backup_appConfiguration.py
@@ -30,38 +30,35 @@ def savebackup(path, output, exclude, token):
     configpath = path + "/" + "App Configuration/"
     data = makeapirequest(ENDPOINT, token)
 
-    if data['value']:
+    if data["value"]:
 
-        assignment_responses = batch_assignment(
-            data, 'deviceAppManagement/mobileAppConfigurations/', '/assignments', token)
+        assignment_responses = batch_assignment(data, "deviceAppManagement/mobileAppConfigurations/", "/assignments", token)
 
-        for profile in data['value']:
+        for profile in data["value"]:
             config_count += 1
             if "assignments" not in exclude:
-                assignments = get_object_assignment(
-                    profile['id'], assignment_responses)
+                assignments = get_object_assignment(profile["id"], assignment_responses)
                 if assignments:
-                    profile['assignments'] = assignments
+                    profile["assignments"] = assignments
 
             profile = remove_keys(profile)
 
             # Get name and type of app on App Configuration Profile
             app_dict = {}
-            for app_id in profile['targetedMobileApps']:
+            for app_id in profile["targetedMobileApps"]:
                 app_data = makeapirequest(APP_ENDPOINT + "/" + app_id, token)
                 if app_data:
-                    app_dict['appName'] = app_data['displayName']
-                    app_dict['type'] = app_data['@odata.type']
+                    app_dict["appName"] = app_data["displayName"]
+                    app_dict["type"] = app_data["@odata.type"]
 
             if app_dict:
-                profile.pop('targetedMobileApps')
-                profile['targetedMobileApps'] = app_dict
+                profile.pop("targetedMobileApps")
+                profile["targetedMobileApps"] = app_dict
 
-            print("Backing up App Configuration: " + profile['displayName'])
+            print("Backing up App Configuration: " + profile["displayName"])
 
             # Get filename without illegal characters
-            fname = clean_filename(
-                f"{profile['displayName']}_{str(profile['@odata.type'].split('.')[2])}")
+            fname = clean_filename(f"{profile['displayName']}_{str(profile['@odata.type'].split('.')[2])}")
             # Save App Configuration as JSON or YAML depending on configured value
             # in "-o"
             save_output(output, configpath, fname, profile)
diff --git a/src/IntuneCD/backup_appleEnrollmentProfile.py b/src/IntuneCD/backup_appleEnrollmentProfile.py
index c7ee3f44..8096f526 100644
--- a/src/IntuneCD/backup_appleEnrollmentProfile.py
+++ b/src/IntuneCD/backup_appleEnrollmentProfile.py
@@ -28,28 +28,24 @@ def savebackup(path, output, token):
     configpath = path + "/" + "Enrollment Profiles/Apple/"
     data = makeapirequest(ENDPOINT, token)
 
-    if data['value']:
+    if data["value"]:
         profile_ids = []
-        for profile in data['value']:
-            profile_ids.append(profile['id'])
+        for profile in data["value"]:
+            profile_ids.append(profile["id"])
 
         batch_profile_data = batch_request(
-            profile_ids,
-            'deviceManagement/depOnboardingSettings/',
-            '/enrollmentProfiles',
-            token)
+            profile_ids, "deviceManagement/depOnboardingSettings/", "/enrollmentProfiles", token
+        )
 
         for profile in batch_profile_data:
             config_count += 1
-            for value in profile['value']:
+            for value in profile["value"]:
                 value = remove_keys(value)
 
-                print(
-                    "Backing up Apple enrollment profile: " +
-                    value['displayName'])
+                print("Backing up Apple enrollment profile: " + value["displayName"])
 
                 # Get filename without illegal characters
-                fname = clean_filename(value['displayName'])
+                fname = clean_filename(value["displayName"])
                 # Save Apple Enrollment Profile as JSON or YAML depending on
                 # configured value in "-o"
                 save_output(output, configpath, fname, value)
diff --git a/src/IntuneCD/backup_applications.py b/src/IntuneCD/backup_applications.py
index 9aa3c4c9..0f9330e4 100644
--- a/src/IntuneCD/backup_applications.py
+++ b/src/IntuneCD/backup_applications.py
@@ -15,7 +15,8 @@
 # Set MS Graph endpoint
 q_param = {
     "$filter": "(microsoft.graph.managedApp/appAvailability) eq null or (microsoft.graph.managedApp/appAvailability) "
-               "eq 'lineOfBusiness' or isAssigned eq true"}
+    "eq 'lineOfBusiness' or isAssigned eq true"
+}
 ENDPOINT = "https://graph.microsoft.com/beta/deviceAppManagement/mobileApps"
 
 
@@ -28,7 +29,7 @@ def match(platform, input) -> bool:
     :return: False if no match, True if match
     """
 
-    string = f'.*{platform}.*$'
+    string = f".*{platform}.*$"
     pattern = re.compile(string)
     match = pattern.match(input, re.IGNORECASE)
     return bool(match)
@@ -48,68 +49,61 @@ def savebackup(path, output, exclude, token):
     config_count = 0
 
     data = makeapirequest(ENDPOINT, token, q_param)
-    assignment_responses = batch_assignment(
-        data, 'deviceAppManagement/mobileApps/', '/assignments', token)
+    assignment_responses = batch_assignment(data, "deviceAppManagement/mobileApps/", "/assignments", token)
 
-    for app in data['value']:
+    for app in data["value"]:
         app_name = ""
         platform = ""
         config_count += 1
 
         if "assignments" not in exclude:
-            assignments = get_object_assignment(
-                app['id'], assignment_responses)
+            assignments = get_object_assignment(app["id"], assignment_responses)
             if assignments:
-                app['assignments'] = assignments
+                app["assignments"] = assignments
 
         app = remove_keys(app)
-        app.pop('description', None)
+        app.pop("description", None)
 
         # If app type is VPP, add Apple ID to the name as the app can exist
         # multiple times
-        if app['@odata.type'] == '#microsoft.graph.iosVppApp':
-            app_name = app['displayName'] + '_iOSVppApp_' + \
-                str(app['vppTokenAppleId'].split('@')[0])
-        elif app['@odata.type'] == '#microsoft.graph.macOsVppApp':
-            app_name = app['displayName'] + '_macOSVppApp_' + \
-                str(app['vppTokenAppleId'].split('@')[0])
+        if app["@odata.type"] == "#microsoft.graph.iosVppApp":
+            app_name = app["displayName"] + "_iOSVppApp_" + str(app["vppTokenAppleId"].split("@")[0])
+        elif app["@odata.type"] == "#microsoft.graph.macOsVppApp":
+            app_name = app["displayName"] + "_macOSVppApp_" + str(app["vppTokenAppleId"].split("@")[0])
         # If app type is Win32 or MSI, add version to the name as multiple
         # versions can exist
-        elif app['@odata.type'] == '#microsoft.graph.win32LobApp':
-            if app['displayVersion'] is None:
-                app_name = app['displayName'] + '_Win32'
+        elif app["@odata.type"] == "#microsoft.graph.win32LobApp":
+            if app["displayVersion"] is None:
+                app_name = app["displayName"] + "_Win32"
             else:
-                app_name = app['displayName'] + '_Win32_' + \
-                    str(app['displayVersion']).replace('.', '_')
-        elif app['@odata.type'] == '#microsoft.graph.windowsMobileMSI':
-            app_name = app['displayName'] + '_WinMSI_' + \
-                str(app['productVersion']).replace('.', '_')
+                app_name = app["displayName"] + "_Win32_" + str(app["displayVersion"]).replace(".", "_")
+        elif app["@odata.type"] == "#microsoft.graph.windowsMobileMSI":
+            app_name = app["displayName"] + "_WinMSI_" + str(app["productVersion"]).replace(".", "_")
         # If app is not VPP, Win32 or MSI only add the app type to the name
         else:
-            app_name = app['displayName'] + '_' + \
-                str(app['@odata.type'].split('.')[2])
+            app_name = app["displayName"] + "_" + str(app["@odata.type"].split(".")[2])
 
         # Get application platform
-        if match('ios', str(app['@odata.type']).lower()) is True:
-            platform = 'iOS'
-        if match('macos', str(app['@odata.type']).lower()) is True:
-            platform = 'macOS'
-        if match('android', str(app['@odata.type']).lower()) is True:
-            platform = 'Android'
-        if match('windows', str(app['@odata.type']).lower()) is True:
-            platform = 'Windows'
-        if match('microsoft', str(app['@odata.type']).lower()) is True:
-            platform = 'Windows'
-        if match('win32', str(app['@odata.type']).lower()) is True:
-            platform = 'Windows'
-        if match('office', str(app['@odata.type']).lower()) is True:
-            platform = 'Office Suite'
-        if app['@odata.type'] == '#microsoft.graph.webApp':
-            platform = 'Web App'
+        if match("ios", str(app["@odata.type"]).lower()) is True:
+            platform = "iOS"
+        if match("macos", str(app["@odata.type"]).lower()) is True:
+            platform = "macOS"
+        if match("android", str(app["@odata.type"]).lower()) is True:
+            platform = "Android"
+        if match("windows", str(app["@odata.type"]).lower()) is True:
+            platform = "Windows"
+        if match("microsoft", str(app["@odata.type"]).lower()) is True:
+            platform = "Windows"
+        if match("win32", str(app["@odata.type"]).lower()) is True:
+            platform = "Windows"
+        if match("office", str(app["@odata.type"]).lower()) is True:
+            platform = "Office Suite"
+        if app["@odata.type"] == "#microsoft.graph.webApp":
+            platform = "Web App"
 
         print(f"Backing up Application: {app['displayName']}")
 
-        configpath = f'{path}/Applications/{platform}/'
+        configpath = f"{path}/Applications/{platform}/"
 
         # Get filename without illegal characters
         fname = clean_filename(app_name)
diff --git a/src/IntuneCD/backup_assignmentFilters.py b/src/IntuneCD/backup_assignmentFilters.py
index eb2750d6..6c67110e 100644
--- a/src/IntuneCD/backup_assignmentFilters.py
+++ b/src/IntuneCD/backup_assignmentFilters.py
@@ -28,13 +28,13 @@ def savebackup(path, output, token):
     data = makeapirequest(ENDPOINT, token)
 
     if data:
-        for assign_filter in data['value']:
+        for assign_filter in data["value"]:
             config_count += 1
             assign_filter = remove_keys(assign_filter)
-            print("Backing up Filter: " + assign_filter['displayName'])
+            print("Backing up Filter: " + assign_filter["displayName"])
 
             # Get filename without illegal characters
-            fname = clean_filename(assign_filter['displayName'])
+            fname = clean_filename(assign_filter["displayName"])
             # Save Filters as JSON or YAML depending on configured value in
             # "-o"
             save_output(output, configpath, fname, assign_filter)
diff --git a/src/IntuneCD/backup_autopilotDevices.py b/src/IntuneCD/backup_autopilotDevices.py
index 39f6e939..f4ff2f72 100644
--- a/src/IntuneCD/backup_autopilotDevices.py
+++ b/src/IntuneCD/backup_autopilotDevices.py
@@ -26,10 +26,10 @@ def savebackup(path, output, token):
     configpath = path + "/" + "Autopilot Devices/"
     data = makeapirequest(ENDPOINT, token)
 
-    for device in data['value']:
+    for device in data["value"]:
 
         # Get filename without illegal characters
-        fname = clean_filename(device['id'])
+        fname = clean_filename(device["id"])
         # Save Autopilot device as JSON or YAML depending on configured
         # value in "-o"
         save_output(output, configpath, fname, device)
diff --git a/src/IntuneCD/backup_compliance.py b/src/IntuneCD/backup_compliance.py
index 5cb4cc32..62ad688c 100644
--- a/src/IntuneCD/backup_compliance.py
+++ b/src/IntuneCD/backup_compliance.py
@@ -27,34 +27,31 @@ def savebackup(path, output, exclude, token):
 
     config_count = 0
     configpath = path + "/" + "Compliance Policies/Policies/"
-    q_param = {
-        "$expand": "scheduledActionsForRule($expand=scheduledActionConfigurations)"}
+    q_param = {"$expand": "scheduledActionsForRule($expand=scheduledActionConfigurations)"}
     data = makeapirequest(ENDPOINT, token, q_param)
 
-    assignment_responses = batch_assignment(
-        data, 'deviceManagement/deviceCompliancePolicies/', '/assignments', token)
+    assignment_responses = batch_assignment(data, "deviceManagement/deviceCompliancePolicies/", "/assignments", token)
 
-    for policy in data['value']:
+    for policy in data["value"]:
         config_count += 1
-        print("Backing up compliance policy: " + policy['displayName'])
+        print("Backing up compliance policy: " + policy["displayName"])
 
         if "assignments" not in exclude:
-            assignments = get_object_assignment(
-                policy['id'], assignment_responses)
+            assignments = get_object_assignment(policy["id"], assignment_responses)
             if assignments:
-                policy['assignments'] = assignments
+                policy["assignments"] = assignments
 
         policy = remove_keys(policy)
-        for rule in policy['scheduledActionsForRule']:
+        for rule in policy["scheduledActionsForRule"]:
             remove_keys(rule)
-        if policy['scheduledActionsForRule']:
-            for scheduled_config in policy['scheduledActionsForRule'][0]['scheduledActionConfigurations']:
+        if policy["scheduledActionsForRule"]:
+            for scheduled_config in policy["scheduledActionsForRule"][0]["scheduledActionConfigurations"]:
                 remove_keys(scheduled_config)
 
         # Get filename without illegal characters
-        fname = clean_filename(policy['displayName'])
+        fname = clean_filename(policy["displayName"])
         # Save Compliance policy as JSON or YAML depending on configured value
         # in "-o"
-        save_output(output, configpath, f'{fname}_' + str(policy['@odata.type'].split('.')[2]), policy)
+        save_output(output, configpath, f"{fname}_" + str(policy["@odata.type"].split(".")[2]), policy)
 
     return config_count
diff --git a/src/IntuneCD/backup_compliancePartner.py b/src/IntuneCD/backup_compliancePartner.py
index d3f41492..e26f8038 100644
--- a/src/IntuneCD/backup_compliancePartner.py
+++ b/src/IntuneCD/backup_compliancePartner.py
@@ -27,17 +27,17 @@ def savebackup(path, output, token):
     configpath = path + "/" + "Partner Connections/Compliance/"
     data = makeapirequest(ENDPOINT, token)
 
-    for partner in data['value']:
-        if partner['partnerState'] == "unknown":
+    for partner in data["value"]:
+        if partner["partnerState"] == "unknown":
             continue
 
         config_count += 1
-        print("Backing up Compliance Partner: " + partner['displayName'])
+        print("Backing up Compliance Partner: " + partner["displayName"])
 
         partner = remove_keys(partner)
 
         # Get filename without illegal characters
-        fname = clean_filename(partner['displayName'])
+        fname = clean_filename(partner["displayName"])
         # Save Compliance policy as JSON or YAML depending on configured
         # value in "-o"
         save_output(output, configpath, fname, partner)
diff --git a/src/IntuneCD/backup_conditionalAccess.py b/src/IntuneCD/backup_conditionalAccess.py
index 672ea258..4eea2e35 100644
--- a/src/IntuneCD/backup_conditionalAccess.py
+++ b/src/IntuneCD/backup_conditionalAccess.py
@@ -27,20 +27,20 @@ def savebackup(path, output, token):
     configpath = path + "/" + "Conditional Access/"
     data = makeapirequest(ENDPOINT, token)
 
-    if data['value']:
-        for policy in data['value']:
+    if data["value"]:
+        for policy in data["value"]:
             config_count += 1
-            print("Backing up Conditional Access policy: " + policy['displayName'])
+            print("Backing up Conditional Access policy: " + policy["displayName"])
 
             policy = makeapirequest(f"{ENDPOINT}/{policy['id']}", token)
-            if policy['grantControls']:
-                policy['grantControls'].pop('authenticationStrength@odata.context', None)
+            if policy["grantControls"]:
+                policy["grantControls"].pop("authenticationStrength@odata.context", None)
             policy = remove_keys(policy)
 
             # Get filename without illegal characters
-            fname = clean_filename(policy['displayName'])
+            fname = clean_filename(policy["displayName"])
             # Save Conditional Access as JSON or YAML depending on configured
             # value in "-o"
             save_output(output, configpath, fname, policy)
 
-    return config_count
\ No newline at end of file
+    return config_count
diff --git a/src/IntuneCD/backup_configurationPolicies.py b/src/IntuneCD/backup_configurationPolicies.py
index 48d14a75..2427f99f 100644
--- a/src/IntuneCD/backup_configurationPolicies.py
+++ b/src/IntuneCD/backup_configurationPolicies.py
@@ -29,35 +29,26 @@ def savebackup(path, output, exclude, token):
     configpath = path + "/" + "Settings Catalog/"
     policies = makeapirequest(BASE_ENDPOINT + "/configurationPolicies", token)
     policy_ids = []
-    for policy in policies['value']:
-        policy_ids.append(policy['id'])
+    for policy in policies["value"]:
+        policy_ids.append(policy["id"])
 
-    assignment_responses = batch_assignment(
-        policies,
-        'deviceManagement/configurationPolicies/',
-        '/assignments',
-        token)
-    policy_settings_batch = batch_request(
-        policy_ids,
-        'deviceManagement/configurationPolicies/',
-        '/settings',
-        token)
+    assignment_responses = batch_assignment(policies, "deviceManagement/configurationPolicies/", "/assignments", token)
+    policy_settings_batch = batch_request(policy_ids, "deviceManagement/configurationPolicies/", "/settings", token)
 
-    for policy in policies['value']:
+    for policy in policies["value"]:
         config_count += 1
-        name = policy['name']
+        name = policy["name"]
         print("Backing up configuration policy: " + name)
 
-        settings = get_object_details(policy['id'], policy_settings_batch)
+        settings = get_object_details(policy["id"], policy_settings_batch)
 
         if settings:
-            policy['settings'] = settings
+            policy["settings"] = settings
 
         if "assignments" not in exclude:
-            assignments = get_object_assignment(
-                policy['id'], assignment_responses)
+            assignments = get_object_assignment(policy["id"], assignment_responses)
             if assignments:
-                policy['assignments'] = assignments
+                policy["assignments"] = assignments
 
         policy = remove_keys(policy)
 
diff --git a/src/IntuneCD/backup_enrollmentStatusPage.py b/src/IntuneCD/backup_enrollmentStatusPage.py
index fd38839f..7d70c854 100644
--- a/src/IntuneCD/backup_enrollmentStatusPage.py
+++ b/src/IntuneCD/backup_enrollmentStatusPage.py
@@ -30,40 +30,34 @@ def savebackup(path, output, exclude, token):
     configpath = path + "/" + "Enrollment Profiles/Windows/ESP/"
     data = makeapirequest(ENDPOINT, token)
 
-    assignment_responses = batch_assignment(
-        data,
-        'deviceManagement/deviceEnrollmentConfigurations/',
-        '/assignments',
-        token)
+    assignment_responses = batch_assignment(data, "deviceManagement/deviceEnrollmentConfigurations/", "/assignments", token)
 
-    for profile in data['value']:
-        if profile['@odata.type'] == "#microsoft.graph.windows10EnrollmentCompletionPageConfiguration":
+    for profile in data["value"]:
+        if profile["@odata.type"] == "#microsoft.graph.windows10EnrollmentCompletionPageConfiguration":
             config_count += 1
             if "assignments" not in exclude:
-                assignments = get_object_assignment(
-                    profile['id'], assignment_responses)
+                assignments = get_object_assignment(profile["id"], assignment_responses)
                 if assignments:
-                    profile['assignments'] = assignments
+                    profile["assignments"] = assignments
 
             profile = remove_keys(profile)
 
             # If the profile contains apps, get the name of the app
-            if 'selectedMobileAppIds' in profile:
-                app_ids = profile['selectedMobileAppIds']
+            if "selectedMobileAppIds" in profile:
+                app_ids = profile["selectedMobileAppIds"]
                 app_names = []
                 for app_id in app_ids:
                     app_data = makeapirequest(APP_ENDPOINT + "/" + app_id, token)
-                    app = {'name': app_data['displayName'], 'type': app_data['@odata.type']}
+                    app = {"name": app_data["displayName"], "type": app_data["@odata.type"]}
                     app_names.append(app)
                 if app_names:
-                    profile.pop('selectedMobileAppIds', None)
-                    profile['selectedMobileAppNames'] = app_names
+                    profile.pop("selectedMobileAppIds", None)
+                    profile["selectedMobileAppNames"] = app_names
 
-            print("Backing up Enrollment Status Page: " +
-                profile['displayName'])
+            print("Backing up Enrollment Status Page: " + profile["displayName"])
 
             # Get filename without illegal characters
-            fname = clean_filename(profile['displayName'])
+            fname = clean_filename(profile["displayName"])
             # Save Windows Enrollment Profile as JSON or YAML depending on
             # configured value in "-o"
             save_output(output, configpath, fname, profile)
diff --git a/src/IntuneCD/backup_groupPolicyConfiguration.py b/src/IntuneCD/backup_groupPolicyConfiguration.py
index 6fd632b3..a01b91a9 100644
--- a/src/IntuneCD/backup_groupPolicyConfiguration.py
+++ b/src/IntuneCD/backup_groupPolicyConfiguration.py
@@ -29,10 +29,9 @@ def savebackup(path, output, exclude, token):
     configpath = path + "/" + "Group Policy Configurations/"
     data = makeapirequest(ENDPOINT, token)
 
-    assignment_responses = batch_assignment(
-        data, 'deviceManagement/groupPolicyConfigurations/', '/assignments', token)
+    assignment_responses = batch_assignment(data, "deviceManagement/groupPolicyConfigurations/", "/assignments", token)
 
-    for profile in data['value']:
+    for profile in data["value"]:
         config_count += 1
         definition_endpoint = f"{ENDPOINT}/{profile['id']}/definitionValues?$expand=definition"
         # Get definitions
@@ -40,27 +39,27 @@ def savebackup(path, output, exclude, token):
 
         if definitions:
 
-            profile['definitionValues'] = definitions['value']
+            profile["definitionValues"] = definitions["value"]
 
-            for definition in profile['definitionValues']:
-                presentation_endpoint = \
-                    f"{ENDPOINT}/{profile['id']}/definitionValues/{definition['id']}/" \
+            for definition in profile["definitionValues"]:
+                presentation_endpoint = (
+                    f"{ENDPOINT}/{profile['id']}/definitionValues/{definition['id']}/"
                     f"presentationValues?$expand=presentation "
+                )
                 presentation = makeapirequest(presentation_endpoint, token)
-                definition['presentationValues'] = presentation['value']
+                definition["presentationValues"] = presentation["value"]
 
         if "assignments" not in exclude:
-            assignments = get_object_assignment(
-                profile['id'], assignment_responses)
+            assignments = get_object_assignment(profile["id"], assignment_responses)
             if assignments:
-                profile['assignments'] = assignments
+                profile["assignments"] = assignments
 
         profile = remove_keys(profile)
 
-        print("Backing up profile: " + profile['displayName'])
+        print("Backing up profile: " + profile["displayName"])
 
         # Get filename without illegal characters
-        fname = clean_filename(profile['displayName'])
+        fname = clean_filename(profile["displayName"])
 
         save_output(output, configpath, fname, profile)
 
diff --git a/src/IntuneCD/backup_managedGPlay.py b/src/IntuneCD/backup_managedGPlay.py
index ca4c65cb..df71da1e 100644
--- a/src/IntuneCD/backup_managedGPlay.py
+++ b/src/IntuneCD/backup_managedGPlay.py
@@ -24,17 +24,16 @@ def savebackup(path, output, token):
     """
 
     config_count = 0
-    configpath = f'{path}/Managed Google Play/'
+    configpath = f"{path}/Managed Google Play/"
     data = makeapirequest(ENDPOINT, token)
 
     if data:
         config_count += 1
         data = remove_keys(data)
-        print("Backing up Managed Google Play: " +
-              data['ownerUserPrincipalName'])
+        print("Backing up Managed Google Play: " + data["ownerUserPrincipalName"])
 
         # Get filename without illegal characters
-        fname = clean_filename(data['ownerUserPrincipalName'])
+        fname = clean_filename(data["ownerUserPrincipalName"])
         # Save Managed Google Play as JSON or YAML depending on configured
         # value in "-o"
         save_output(output, configpath, fname, data)
diff --git a/src/IntuneCD/backup_managementIntents.py b/src/IntuneCD/backup_managementIntents.py
index 133aaa1b..bc70c343 100644
--- a/src/IntuneCD/backup_managementIntents.py
+++ b/src/IntuneCD/backup_managementIntents.py
@@ -30,34 +30,31 @@ def savebackup(path, output, exclude, token):
     intents = makeapirequest(BASE_ENDPOINT + "/intents", token)
     templates = makeapirequest(TEMPLATE_ENDPOINT, token)
 
-    assignment_responses = batch_assignment(
-        intents, 'deviceManagement/intents/', '/assignments', token)
+    assignment_responses = batch_assignment(intents, "deviceManagement/intents/", "/assignments", token)
     intent_responses = batch_intents(intents, token)
 
     if intent_responses:
-        for intent_value in intent_responses['value']:
+        for intent_value in intent_responses["value"]:
             config_count += 1
-            print("Backing up Intent: " + intent_value['displayName'])
+            print("Backing up Intent: " + intent_value["displayName"])
 
-            for template in templates['value']:
-                if intent_value['templateId'] == template['id']:
-                    template_type = template['displayName']
+            for template in templates["value"]:
+                if intent_value["templateId"] == template["id"]:
+                    template_type = template["displayName"]
 
-            configpath = path + "/" + "Management Intents/" + \
-                template_type + "/"
+            configpath = path + "/" + "Management Intents/" + template_type + "/"
 
             if "assignments" not in exclude:
-                assignments = get_object_assignment(
-                    intent_value['id'], assignment_responses)
+                assignments = get_object_assignment(intent_value["id"], assignment_responses)
                 if assignments:
-                    intent_value['assignments'] = assignments
+                    intent_value["assignments"] = assignments
 
-            for setting in intent_value['settingsDelta']:
-                setting.pop('id', None)
-            intent_value.pop('id', None)
+            for setting in intent_value["settingsDelta"]:
+                setting.pop("id", None)
+            intent_value.pop("id", None)
 
             # Get filename without illegal characters
-            fname = clean_filename(intent_value['displayName'])
+            fname = clean_filename(intent_value["displayName"])
             # Save Intent as JSON or YAML depending on configured value in "-o"
             save_output(output, configpath, fname, intent_value)
 
diff --git a/src/IntuneCD/backup_managementPartner.py b/src/IntuneCD/backup_managementPartner.py
index 78b99b92..0e16aa52 100644
--- a/src/IntuneCD/backup_managementPartner.py
+++ b/src/IntuneCD/backup_managementPartner.py
@@ -27,17 +27,17 @@ def savebackup(path, output, token):
     configpath = path + "/" + "Partner Connections/Management/"
     data = makeapirequest(ENDPOINT, token)
 
-    for partner in data['value']:
-        if partner['isConfigured'] is False:
+    for partner in data["value"]:
+        if partner["isConfigured"] is False:
             continue
 
         config_count += 1
-        print("Backing up Management Partner: " + partner['displayName'])
+        print("Backing up Management Partner: " + partner["displayName"])
 
         partner = remove_keys(partner)
 
         # Get filename without illegal characters
-        fname = clean_filename(partner['displayName'])
+        fname = clean_filename(partner["displayName"])
         # Save Compliance policy as JSON or YAML depending on configured
         # value in "-o"
         save_output(output, configpath, fname, partner)
diff --git a/src/IntuneCD/backup_notificationTemplate.py b/src/IntuneCD/backup_notificationTemplate.py
index 791572b8..10d2b6e7 100644
--- a/src/IntuneCD/backup_notificationTemplate.py
+++ b/src/IntuneCD/backup_notificationTemplate.py
@@ -28,21 +28,19 @@ def savebackup(path, output, token):
     q_param = "?$expand=localizedNotificationMessages"
     data = makeapirequest(ENDPOINT, token, q_param)
 
-    for template in data['value']:
+    for template in data["value"]:
         config_count += 1
-        print("Backing up Notification message template: " +
-              template['displayName'])
+        print("Backing up Notification message template: " + template["displayName"])
         q_param = "?$expand=localizedNotificationMessages"
-        template_data = makeapirequest(
-            ENDPOINT + "/" + template['id'], token, q_param)
+        template_data = makeapirequest(ENDPOINT + "/" + template["id"], token, q_param)
 
         template_data = remove_keys(template_data)
 
-        for locale in template_data['localizedNotificationMessages']:
+        for locale in template_data["localizedNotificationMessages"]:
             remove_keys(locale)
 
         # Get filename without illegal characters
-        fname = clean_filename(template_data['displayName'])
+        fname = clean_filename(template_data["displayName"])
         # Save Notification template as JSON or YAML depending on configured
         # value in "-o"
         save_output(output, configpath, fname, template_data)
diff --git a/src/IntuneCD/backup_powershellScripts.py b/src/IntuneCD/backup_powershellScripts.py
index 6ba67943..0f9b647b 100644
--- a/src/IntuneCD/backup_powershellScripts.py
+++ b/src/IntuneCD/backup_powershellScripts.py
@@ -31,30 +31,27 @@ def savebackup(path, output, exclude, token):
     config_count = 0
     configpath = path + "/" + "Scripts/Powershell/"
     data = makeapirequest(ENDPOINT, token)
-    if data['value']:
+    if data["value"]:
         script_ids = []
-        for script in data['value']:
-            script_ids.append(script['id'])
+        for script in data["value"]:
+            script_ids.append(script["id"])
 
-        assignment_responses = batch_assignment(
-            data, 'deviceManagement/intents/', '/assignments', token)
-        script_data_responses = batch_request(
-            script_ids, 'deviceManagement/deviceManagementScripts/', '', token)
+        assignment_responses = batch_assignment(data, "deviceManagement/intents/", "/assignments", token)
+        script_data_responses = batch_request(script_ids, "deviceManagement/deviceManagementScripts/", "", token)
 
         for script_data in script_data_responses:
             config_count += 1
             if "assignments" not in exclude:
-                assignments = get_object_assignment(
-                    script_data['id'], assignment_responses)
+                assignments = get_object_assignment(script_data["id"], assignment_responses)
                 if assignments:
-                    script_data['assignments'] = assignments
+                    script_data["assignments"] = assignments
 
             script_data = remove_keys(script_data)
 
-            print("Backing up Powershell script: " + script_data['displayName'])
+            print("Backing up Powershell script: " + script_data["displayName"])
 
             # Get filename without illegal characters
-            fname = clean_filename(script_data['displayName'])
+            fname = clean_filename(script_data["displayName"])
             # Save Powershell script as JSON or YAML depending on configured value
             # in "-o"
             save_output(output, configpath, fname, script_data)
@@ -62,9 +59,8 @@ def savebackup(path, output, exclude, token):
             # Save Powershell script data to the script data folder
             if not os.path.exists(configpath + "Script Data/"):
                 os.makedirs(configpath + "Script Data/")
-            decoded = base64.b64decode(
-                script_data['scriptContent']).decode('utf-8')
-            f = open(configpath + "Script Data/" + script_data['fileName'], 'w')
+            decoded = base64.b64decode(script_data["scriptContent"]).decode("utf-8")
+            f = open(configpath + "Script Data/" + script_data["fileName"], "w")
             f.write(decoded)
 
     return config_count
diff --git a/src/IntuneCD/backup_proactiveRemediation.py b/src/IntuneCD/backup_proactiveRemediation.py
index 3399f1d2..f0c310c7 100644
--- a/src/IntuneCD/backup_proactiveRemediation.py
+++ b/src/IntuneCD/backup_proactiveRemediation.py
@@ -29,57 +29,47 @@ def savebackup(path, output, exclude, token):
     """
 
     config_count = 0
-    configpath = f'{path}/Proactive Remediations/'
+    configpath = f"{path}/Proactive Remediations/"
     data = makeapirequest(ENDPOINT, token)
-    if data['value']:
+    if data["value"]:
         pr_ids = []
-        for script in data['value']:
-            pr_ids.append(script['id'])
+        for script in data["value"]:
+            pr_ids.append(script["id"])
 
-        assignment_responses = batch_assignment(
-            data, 'deviceManagement/deviceHealthScripts/', '/assignments', token)
-        pr_data_responses = batch_request(
-            pr_ids, 'deviceManagement/deviceHealthScripts/', '', token)
+        assignment_responses = batch_assignment(data, "deviceManagement/deviceHealthScripts/", "/assignments", token)
+        pr_data_responses = batch_request(pr_ids, "deviceManagement/deviceHealthScripts/", "", token)
 
         for pr_details in pr_data_responses:
-            if "Microsoft" not in pr_details['publisher']:
+            if "Microsoft" not in pr_details["publisher"]:
                 config_count += 1
                 if "assignments" not in exclude:
-                    assignments = get_object_assignment(
-                        pr_details['id'], assignment_responses)
+                    assignments = get_object_assignment(pr_details["id"], assignment_responses)
                     if assignments:
-                        pr_details['assignments'] = assignments
+                        pr_details["assignments"] = assignments
 
                 pr_details = remove_keys(pr_details)
 
-                print(
-                    f"Backing up Proactive Remediation: {pr_details['displayName']}")
+                print(f"Backing up Proactive Remediation: {pr_details['displayName']}")
 
                 # Get filename without illegal characters
-                fname = clean_filename(pr_details['displayName'])
+                fname = clean_filename(pr_details["displayName"])
 
                 # Save Proactive Remediation as JSON or YAML depending on
                 # configured value in "-o"
                 save_output(output, configpath, fname, pr_details)
 
-                if not os.path.exists(f'{configpath}/Script Data'):
-                    os.makedirs(f'{configpath}/Script Data')
+                if not os.path.exists(f"{configpath}/Script Data"):
+                    os.makedirs(f"{configpath}/Script Data")
 
                 # Save detection script to the Script Data folder
                 config_count += 1
-                decoded = base64.b64decode(
-                    pr_details['detectionScriptContent']).decode('utf-8')
-                f = open(
-                    f"{configpath}/Script Data/{fname}_DetectionScript.ps1",
-                    'w')
+                decoded = base64.b64decode(pr_details["detectionScriptContent"]).decode("utf-8")
+                f = open(f"{configpath}/Script Data/{fname}_DetectionScript.ps1", "w")
                 f.write(decoded)
                 # Save remediation script to the Script Data folder
                 config_count += 1
-                decoded = base64.b64decode(
-                    pr_details['remediationScriptContent']).decode('utf-8')
-                f = open(
-                    f"{configpath}/Script Data/{fname}_RemediationScript.ps1",
-                    'w')
+                decoded = base64.b64decode(pr_details["remediationScriptContent"]).decode("utf-8")
+                f = open(f"{configpath}/Script Data/{fname}_RemediationScript.ps1", "w")
                 f.write(decoded)
 
     return config_count
diff --git a/src/IntuneCD/backup_profiles.py b/src/IntuneCD/backup_profiles.py
index 9ce8af5c..01feb176 100644
--- a/src/IntuneCD/backup_profiles.py
+++ b/src/IntuneCD/backup_profiles.py
@@ -32,37 +32,34 @@ def savebackup(path, output, exclude, token):
     configpath = path + "/" + "Device Configurations/"
     data = makeapirequest(ENDPOINT, token)
 
-    assignment_responses = batch_assignment(
-        data, 'deviceManagement/deviceConfigurations/', '/assignments', token)
+    assignment_responses = batch_assignment(data, "deviceManagement/deviceConfigurations/", "/assignments", token)
 
-    for profile in data['value']:
+    for profile in data["value"]:
         config_count += 1
         if "assignments" not in exclude:
-            assignments = get_object_assignment(
-                profile['id'], assignment_responses)
+            assignments = get_object_assignment(profile["id"], assignment_responses)
             if assignments:
-                profile['assignments'] = assignments
+                profile["assignments"] = assignments
 
-        pid = profile['id']
+        pid = profile["id"]
         profile = remove_keys(profile)
 
-        print("Backing up profile: " + profile['displayName'])
+        print("Backing up profile: " + profile["displayName"])
 
         # Get filename without illegal characters
-        fname = clean_filename(
-            f"{profile['displayName']}_{str(profile['@odata.type']).split('.')[2]}")
+        fname = clean_filename(f"{profile['displayName']}_{str(profile['@odata.type']).split('.')[2]}")
 
         # If profile is custom macOS or iOS, decode the payload
-        if ((profile['@odata.type'] == "#microsoft.graph.macOSCustomConfiguration")
-                or (profile['@odata.type'] == "#microsoft.graph.iosCustomConfiguration")):
-            decoded = base64.b64decode(profile['payload']).decode('utf-8')
+        if (profile["@odata.type"] == "#microsoft.graph.macOSCustomConfiguration") or (
+            profile["@odata.type"] == "#microsoft.graph.iosCustomConfiguration"
+        ):
+            decoded = base64.b64decode(profile["payload"]).decode("utf-8")
 
-            if not os.path.exists(configpath + '/' + "mobileconfig/"):
-                os.makedirs(configpath + '/' + "mobileconfig/")
+            if not os.path.exists(configpath + "/" + "mobileconfig/"):
+                os.makedirs(configpath + "/" + "mobileconfig/")
             # Save decoded payload as .mobileconfig
             config_count += 1
-            f = open(configpath + '/' + "mobileconfig/" +
-                     profile['payloadFileName'], 'w')
+            f = open(configpath + "/" + "mobileconfig/" + profile["payloadFileName"], "w")
             f.write(decoded)
             # Save Device Configuration as JSON or YAML depending on configured
             # value in "-o"
@@ -70,34 +67,35 @@ def savebackup(path, output, exclude, token):
 
         # If Device Configuration is custom Win10 and the OMA settings are
         # encrypted, get them in plain text
-        elif profile['@odata.type'] == "#microsoft.graph.windows10CustomConfiguration":
-            if profile['omaSettings']:
-                if profile['omaSettings'][0]['isEncrypted'] is True:
+        elif profile["@odata.type"] == "#microsoft.graph.windows10CustomConfiguration":
+            if profile["omaSettings"]:
+                if profile["omaSettings"][0]["isEncrypted"] is True:
 
                     omas = []
-                    for setting in profile['omaSettings']:
-                        if setting['isEncrypted']:
+                    for setting in profile["omaSettings"]:
+                        if setting["isEncrypted"]:
                             decoded_oma = {}
                             oma_value = makeapirequest(
-                                ENDPOINT +
-                                "/" +
-                                pid +
-                                "/getOmaSettingPlainTextValue(secretReferenceValueId='" +
-                                setting['secretReferenceValueId'] +
-                                "')",
-                                token)
-                            decoded_oma['@odata.type'] = setting['@odata.type']
-                            decoded_oma['displayName'] = setting['displayName']
-                            decoded_oma['description'] = setting['description']
-                            decoded_oma['omaUri'] = setting['omaUri']
-                            decoded_oma['value'] = oma_value
-                            decoded_oma['isEncrypted'] = False
-                            decoded_oma['secretReferenceValueId'] = None
+                                ENDPOINT
+                                + "/"
+                                + pid
+                                + "/getOmaSettingPlainTextValue(secretReferenceValueId='"
+                                + setting["secretReferenceValueId"]
+                                + "')",
+                                token,
+                            )
+                            decoded_oma["@odata.type"] = setting["@odata.type"]
+                            decoded_oma["displayName"] = setting["displayName"]
+                            decoded_oma["description"] = setting["description"]
+                            decoded_oma["omaUri"] = setting["omaUri"]
+                            decoded_oma["value"] = oma_value
+                            decoded_oma["isEncrypted"] = False
+                            decoded_oma["secretReferenceValueId"] = None
                             decoded_omas = decoded_oma
                             omas.append(decoded_omas)
 
-                    profile.pop('omaSettings')
-                    profile['omaSettings'] = omas
+                    profile.pop("omaSettings")
+                    profile["omaSettings"] = omas
 
             # Save Device Configuration as JSON or YAML depending on configured
             # value in "-o"
diff --git a/src/IntuneCD/backup_remoteAssistancePartner.py b/src/IntuneCD/backup_remoteAssistancePartner.py
index 6113a840..ab7ba271 100644
--- a/src/IntuneCD/backup_remoteAssistancePartner.py
+++ b/src/IntuneCD/backup_remoteAssistancePartner.py
@@ -27,19 +27,17 @@ def savebackup(path, output, token):
     configpath = path + "/" + "Partner Connections/Remote Assistance/"
     data = makeapirequest(ENDPOINT, token)
 
-    for partner in data['value']:
-        if partner['onboardingStatus'] == "notOnboarded":
+    for partner in data["value"]:
+        if partner["onboardingStatus"] == "notOnboarded":
             continue
 
         config_count += 1
-        print(
-            "Backing up Remote Assistance Partner: " +
-            partner['displayName'])
+        print("Backing up Remote Assistance Partner: " + partner["displayName"])
 
         partner = remove_keys(partner)
 
         # Get filename without illegal characters
-        fname = clean_filename(partner['displayName'])
+        fname = clean_filename(partner["displayName"])
         # Save Compliance policy as JSON or YAML depending on configured
         # value in "-o"
         save_output(output, configpath, fname, partner)
diff --git a/src/IntuneCD/backup_shellScripts.py b/src/IntuneCD/backup_shellScripts.py
index 72e38a64..9621bdb4 100644
--- a/src/IntuneCD/backup_shellScripts.py
+++ b/src/IntuneCD/backup_shellScripts.py
@@ -33,25 +33,25 @@ def savebackup(path, output, exclude, token):
     configpath = path + "/" + "Scripts/Shell/"
     data = makeapirequest(ENDPOINT, token)
     script_ids = []
-    for script in data['value']:
-        script_ids.append(script['id'])
+    for script in data["value"]:
+        script_ids.append(script["id"])
 
-    assignment_responses = batch_assignment(data, 'deviceManagement/deviceManagementScripts/', '/assignments', token)
-    script_data_responses = batch_request(script_ids, 'deviceManagement/deviceShellScripts/', '', token)
+    assignment_responses = batch_assignment(data, "deviceManagement/deviceManagementScripts/", "/assignments", token)
+    script_data_responses = batch_request(script_ids, "deviceManagement/deviceShellScripts/", "", token)
 
     for script_data in script_data_responses:
         config_count += 1
         if "assignments" not in exclude:
-            assignments = get_object_assignment(script_data['id'], assignment_responses)
+            assignments = get_object_assignment(script_data["id"], assignment_responses)
             if assignments:
-                script_data['assignments'] = assignments
+                script_data["assignments"] = assignments
 
         script_data = remove_keys(script_data)
 
-        print("Backing up Shell script: " + script_data['displayName'])
+        print("Backing up Shell script: " + script_data["displayName"])
 
         # Get filename without illegal characters
-        fname = clean_filename(script_data['displayName'])
+        fname = clean_filename(script_data["displayName"])
 
         # Save Shell script as JSON or YAML depending on configured value in "-o"
         save_output(output, configpath, fname, script_data)
@@ -59,9 +59,8 @@ def savebackup(path, output, exclude, token):
         # Save Shell script data to the script data folder
         if not os.path.exists(configpath + "Script Data/"):
             os.makedirs(configpath + "Script Data/")
-        decoded = base64.b64decode(
-            script_data['scriptContent']).decode('utf-8')
-        f = open(configpath + "Script Data/" + script_data['fileName'], 'w')
+        decoded = base64.b64decode(script_data["scriptContent"]).decode("utf-8")
+        f = open(configpath + "Script Data/" + script_data["fileName"], "w")
         f.write(decoded)
 
     return config_count
diff --git a/src/IntuneCD/backup_vppTokens.py b/src/IntuneCD/backup_vppTokens.py
index 2b649ef1..9b581881 100644
--- a/src/IntuneCD/backup_vppTokens.py
+++ b/src/IntuneCD/backup_vppTokens.py
@@ -24,15 +24,15 @@ def savebackup(path, output, token):
     """
 
     config_count = 0
-    configpath = f'{path}/Apple VPP Tokens/'
+    configpath = f"{path}/Apple VPP Tokens/"
     data = makeapirequest(ENDPOINT, token)
 
-    for vpp_token in data['value']:
+    for vpp_token in data["value"]:
         config_count += 1
-        token_name = vpp_token['displayName']
+        token_name = vpp_token["displayName"]
         vpp_token = remove_keys(vpp_token)
 
-        print(f'Backing up VPP token: {token_name}')
+        print(f"Backing up VPP token: {token_name}")
 
         # Get filename without illegal characters
         fname = clean_filename(token_name)
diff --git a/src/IntuneCD/backup_windowsEnrollmentProfile.py b/src/IntuneCD/backup_windowsEnrollmentProfile.py
index c668aba5..554f1b7a 100644
--- a/src/IntuneCD/backup_windowsEnrollmentProfile.py
+++ b/src/IntuneCD/backup_windowsEnrollmentProfile.py
@@ -30,26 +30,22 @@ def savebackup(path, output, exclude, token):
     data = makeapirequest(ENDPOINT, token)
 
     assignment_responses = batch_assignment(
-        data,
-        'deviceManagement/windowsAutopilotDeploymentProfiles/',
-        '/assignments',
-        token)
+        data, "deviceManagement/windowsAutopilotDeploymentProfiles/", "/assignments", token
+    )
 
-    for profile in data['value']:
+    for profile in data["value"]:
         config_count += 1
         if "assignments" not in exclude:
-            assignments = get_object_assignment(
-                profile['id'], assignment_responses)
+            assignments = get_object_assignment(profile["id"], assignment_responses)
             if assignments:
-                profile['assignments'] = assignments
+                profile["assignments"] = assignments
 
         profile = remove_keys(profile)
 
-        print("Backing up Autopilot enrollment profile: " +
-              profile['displayName'])
+        print("Backing up Autopilot enrollment profile: " + profile["displayName"])
 
         # Get filename without illegal characters
-        fname = clean_filename(profile['displayName'])
+        fname = clean_filename(profile["displayName"])
         # Save Windows Enrollment Profile as JSON or YAML depending on
         # configured value in "-o"
         save_output(output, configpath, fname, profile)
diff --git a/src/IntuneCD/diff_summary.py b/src/IntuneCD/diff_summary.py
new file mode 100644
index 00000000..0dd4e54b
--- /dev/null
+++ b/src/IntuneCD/diff_summary.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python3
+
+"""
+This module is used to get diff summary from the diff.
+"""
+
+import re
+
+from dataclasses import dataclass, field
+from datetime import datetime
+
+
+@dataclass
+class DiffSummary:
+    """
+    This class is used to get a summary of the diff.
+
+    :param data: The diff data
+    :param name: The name of the object
+    :param type: The type of the object
+    :param count: The number of changes
+    :param message: A message to display
+    :param notify: Whether to notify if no changes are found
+    :param diffs: The list of changes
+    """
+
+    data: dict = field(default_factory=dict)
+    name: str = ""
+    type: str = ""
+    count: int = field(init=False, default=0)
+    message: str = ""
+    notify: bool = True
+    diffs: list = field(init=False, default_factory=list)
+
+    def __post_init__(self):
+        for key, value in self.data.items():
+            vals = {}
+            setting = re.search("\\[(.*)\\]", key)
+            if setting:
+                setting = setting.group(1).split("[")[-1]
+
+            vals["setting"] = str(setting).replace("'", "").replace('"', "")
+            vals["new_val"] = str(value["new_value"]).replace("'", "").replace('"', "")
+            vals["old_val"] = str(value["old_value"]).replace("'", "").replace('"', "")
+            vals["change_date"] = str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
+            self.diffs.append(vals)
+
+        if self.diffs and not self.message:
+            print(f"Updating {self.type}: {self.name}, values changed:")
+            for item in self.diffs:
+                print(f"Setting: {item['setting']}, New Value: {item['new_val']}, Old Value: {item['old_val']}")
+        elif self.data and self.message:
+            self.diffs = [self.message]
+            print(self.message)
+        else:
+            if self.notify:
+                print(f"No changes found for {self.type}: {self.name}")
+
+        self.count = len(self.diffs)
diff --git a/src/IntuneCD/documentation_functions.py b/src/IntuneCD/documentation_functions.py
index dc7231b5..84f76ca4 100644
--- a/src/IntuneCD/documentation_functions.py
+++ b/src/IntuneCD/documentation_functions.py
@@ -20,10 +20,10 @@ def md_file(outpath):
 
     :param outpath: The path to save the Markdown document to
     """
-    if not os.path.exists(f'{outpath}'):
-        open(outpath, 'w+').close()
+    if not os.path.exists(f"{outpath}"):
+        open(outpath, "w+").close()
     else:
-        open(outpath, 'w').close()
+        open(outpath, "w").close()
 
 
 def write_table(data):
@@ -35,7 +35,7 @@ def write_table(data):
     """
 
     writer = MarkdownTableWriter(
-        headers=['setting', 'value'],
+        headers=["setting", "value"],
         value_matrix=data,
     )
 
@@ -51,40 +51,45 @@ def assignment_table(data):
     """
 
     def write_assignment_table(data, headers):
-        writer = MarkdownTableWriter(
-            headers=headers,
-            value_matrix=data
-        )
+        writer = MarkdownTableWriter(headers=headers, value_matrix=data)
 
         return writer
 
     table = ""
     if "assignments" in data:
-        assignments = data['assignments']
+        assignments = data["assignments"]
         assignment_list = []
         target = ""
         intent = ""
         for assignment in assignments:
-            if assignment['target']['@odata.type'] == "#microsoft.graph.allDevicesAssignmentTarget":
+            if assignment["target"]["@odata.type"] == "#microsoft.graph.allDevicesAssignmentTarget":
                 target = "All Devices"
-            if assignment['target']['@odata.type'] == "#microsoft.graph.allLicensedUsersAssignmentTarget":
+            if assignment["target"]["@odata.type"] == "#microsoft.graph.allLicensedUsersAssignmentTarget":
                 target = "All Users"
-            if 'groupName' in assignment['target']:
-                target = assignment['target']['groupName']
+            if "groupName" in assignment["target"]:
+                target = assignment["target"]["groupName"]
             if "intent" in assignment:
-                intent = assignment['intent']
-                headers = ['intent', 'target', 'filter type', 'filter name']
+                intent = assignment["intent"]
+                headers = ["intent", "target", "filter type", "filter name"]
             else:
-                headers = ['target', 'filter type', 'filter name']
+                headers = ["target", "filter type", "filter name"]
             if intent:
-                assignment_list.append([intent,
-                                        target,
-                                        assignment['target']['deviceAndAppManagementAssignmentFilterType'],
-                                        assignment['target']['deviceAndAppManagementAssignmentFilterId']])
+                assignment_list.append(
+                    [
+                        intent,
+                        target,
+                        assignment["target"]["deviceAndAppManagementAssignmentFilterType"],
+                        assignment["target"]["deviceAndAppManagementAssignmentFilterId"],
+                    ]
+                )
             else:
-                assignment_list.append([target,
-                                        assignment['target']['deviceAndAppManagementAssignmentFilterType'],
-                                        assignment['target']['deviceAndAppManagementAssignmentFilterId']])
+                assignment_list.append(
+                    [
+                        target,
+                        assignment["target"]["deviceAndAppManagementAssignmentFilterType"],
+                        assignment["target"]["deviceAndAppManagementAssignmentFilterId"],
+                    ]
+                )
 
             table = write_assignment_table(assignment_list, headers)
 
@@ -194,7 +199,7 @@ def list_string(l) -> str:
 
     def string(s) -> str:
         if len(s) > 200:
-            string = f'<details><summary>Click to expand...</summary>{item}</details>'
+            string = f"<details><summary>Click to expand...</summary>{item}</details>"
         else:
             string = item
 
@@ -226,6 +231,7 @@ def document_configs(configpath, outpath, header, max_length, split, cleanup):
     :param header: Header of the configuration being documented
     :param max_length: The maximum length of the configuration to write to the Markdown document
     :param split: Split documentation into multiple files
+    :param cleanup: Remove empty values from documentation
     """
 
     # If configurations path exists, continue
@@ -233,8 +239,8 @@ def document_configs(configpath, outpath, header, max_length, split, cleanup):
         if split:
             outpath = configpath + "/" + header + ".md"
             md_file(outpath)
-        with open(outpath, 'a') as md:
-            md.write('# ' + header + '\n')
+        with open(outpath, "a") as md:
+            md.write("# " + header + "\n")
 
         pattern = configpath + "*/*"
         for filename in sorted(glob.glob(pattern, recursive=True), key=str.casefold):
@@ -253,13 +259,13 @@ def document_configs(configpath, outpath, header, max_length, split, cleanup):
                 # Create assignments table
                 assignments_table = ""
                 assignments_table = assignment_table(repo_data)
-                repo_data.pop('assignments', None)
+                repo_data.pop("assignments", None)
 
                 description = ""
-                if 'description' in repo_data:
-                    if repo_data['description'] is not None:
-                        description = repo_data['description']
-                        repo_data.pop('description')
+                if "description" in repo_data:
+                    if repo_data["description"] is not None:
+                        description = repo_data["description"]
+                        repo_data.pop("description")
 
                 # Write configuration Markdown table
                 config_table_list = []
@@ -273,8 +279,8 @@ def document_configs(configpath, outpath, header, max_length, split, cleanup):
 
                     else:
                         key = key[0].upper() + key[1:]
-                        key = re.findall('[A-Z][^A-Z]*', key)
-                        key = ' '.join(key)
+                        key = re.findall("[A-Z][^A-Z]*", key)
+                        key = " ".join(key)
 
                     if max_length:
                         if value and isinstance(value, str) and len(value) > max_length:
@@ -285,17 +291,17 @@ def document_configs(configpath, outpath, header, max_length, split, cleanup):
                 config_table = write_table(config_table_list)
 
                 # Write data to file
-                with open(outpath, 'a') as md:
+                with open(outpath, "a") as md:
                     if "displayName" in repo_data:
-                        md.write('## ' + repo_data['displayName'] + '\n')
+                        md.write("## " + repo_data["displayName"] + "\n")
                     if "name" in repo_data:
-                        md.write('## ' + repo_data['name'] + '\n')
+                        md.write("## " + repo_data["name"] + "\n")
                     if description:
-                        md.write(f'Description: {description} \n')
+                        md.write(f"Description: {description} \n")
                     if assignments_table:
-                        md.write('### Assignments \n')
-                        md.write(str(assignments_table) + '\n')
-                    md.write(str(config_table) + '\n')
+                        md.write("### Assignments \n")
+                        md.write(str(assignments_table) + "\n")
+                    md.write(str(config_table) + "\n")
 
 
 def document_management_intents(configpath, outpath, header, split):
@@ -313,8 +319,8 @@ def document_management_intents(configpath, outpath, header, split):
         if split:
             outpath = configpath + "/" + header + ".md"
             md_file(outpath)
-        with open(outpath, 'a') as md:
-            md.write('# ' + header + '\n')
+        with open(outpath, "a") as md:
+            md.write("# " + header + "\n")
 
         pattern = configpath + "*/*"
         for filename in sorted(glob.glob(pattern, recursive=True), key=str.casefold):
@@ -337,53 +343,52 @@ def document_management_intents(configpath, outpath, header, split):
                 # Create assignments table
                 assignments_table = ""
                 assignments_table = assignment_table(repo_data)
-                repo_data.pop('assignments', None)
+                repo_data.pop("assignments", None)
 
                 intent_settings_list = []
-                for setting in repo_data['settingsDelta']:
-                    setting_definition = setting['definitionId'].split("_")[1]
+                for setting in repo_data["settingsDelta"]:
+                    setting_definition = setting["definitionId"].split("_")[1]
                     setting_definition = setting_definition[0].upper() + setting_definition[1:]
-                    setting_definition = re.findall('[A-Z][^A-Z]*', setting_definition)
-                    setting_definition = ' '.join(setting_definition)
+                    setting_definition = re.findall("[A-Z][^A-Z]*", setting_definition)
+                    setting_definition = " ".join(setting_definition)
 
                     vals = []
-                    value = str(remove_characters(setting['valueJson']))
-                    comma = re.findall('[:][^:]*', value)
-                    for v in value.split(','):
-                        v = v.replace(' ', '')
+                    value = str(remove_characters(setting["valueJson"]))
+                    comma = re.findall("[:][^:]*", value)
+                    for v in value.split(","):
+                        v = v.replace(" ", "")
                         if comma:
                             v = f'**{v.replace(":", ":** ")}'
                         vals.append(v)
                     value = ",".join(vals)
-                    value = value.replace(',', '<br />')
+                    value = value.replace(",", "<br />")
 
-                    intent_settings_list.append([setting_definition,
-                                                 value])
+                    intent_settings_list.append([setting_definition, value])
 
-                repo_data.pop('settingsDelta')
+                repo_data.pop("settingsDelta")
 
                 description = ""
-                if 'description' in repo_data:
-                    if repo_data['description'] is not None:
-                        description = repo_data['description']
-                        repo_data.pop('description')
+                if "description" in repo_data:
+                    if repo_data["description"] is not None:
+                        description = repo_data["description"]
+                        repo_data.pop("description")
 
                 intent_table_list = []
 
                 for key, value in zip(repo_data.keys(), clean_list(repo_data.values())):
                     key = key[0].upper() + key[1:]
-                    key = re.findall('[A-Z][^A-Z]*', key)
-                    key = ' '.join(key)
+                    key = re.findall("[A-Z][^A-Z]*", key)
+                    key = " ".join(key)
 
                     if value and isinstance(value, str):
                         if len(value.split(",")) > 1:
                             vals = []
-                            for v in value.split(','):
-                                v = v.replace(' ', '')
+                            for v in value.split(","):
+                                v = v.replace(" ", "")
                                 v = f'**{v.replace(":", ":** ")}'
                                 vals.append(v)
                             value = ",".join(vals)
-                            value = value.replace(',', '<br />')
+                            value = value.replace(",", "<br />")
 
                     intent_table_list.append([key, value])
 
@@ -391,17 +396,17 @@ def document_management_intents(configpath, outpath, header, split):
 
                 config_table = write_table(table)
                 # Write data to file
-                with open(outpath, 'a') as md:
+                with open(outpath, "a") as md:
                     if "displayName" in repo_data:
-                        md.write('## ' + repo_data['displayName'] + '\n')
+                        md.write("## " + repo_data["displayName"] + "\n")
                     if "name" in repo_data:
-                        md.write('## ' + repo_data['name'] + '\n')
+                        md.write("## " + repo_data["name"] + "\n")
                     if description:
-                        md.write(f'Description: {description} \n')
+                        md.write(f"Description: {description} \n")
                     if assignments_table:
-                        md.write('### Assignments \n')
-                        md.write(str(assignments_table) + '\n')
-                    md.write(str(config_table) + '\n')
+                        md.write("### Assignments \n")
+                        md.write(str(assignments_table) + "\n")
+                    md.write(str(config_table) + "\n")
 
 
 def get_md_files(configpath):
@@ -419,7 +424,7 @@ def get_md_files(configpath):
         for filename in glob.glob(configpath + pattern, recursive=True):
             filepath = filename.split(slash)
             configpathname = configpath.split(slash)[-1]
-            filepath = filepath[filepath.index(configpathname):]
+            filepath = filepath[filepath.index(configpathname) :]
             filepath = "/".join(filepath[1:])
 
             md_files.append(f"./{filepath}")
diff --git a/src/IntuneCD/get_accesstoken.py b/src/IntuneCD/get_accesstoken.py
index c292f29d..d43c8089 100644
--- a/src/IntuneCD/get_accesstoken.py
+++ b/src/IntuneCD/get_accesstoken.py
@@ -18,9 +18,8 @@ def obtain_accesstoken(TENANT_NAME, CLIENT_ID, CLIENT_SECRET, resource):
     :return: The access token
     """
 
-    auth_context = AuthenticationContext('https://login.microsoftonline.com/' +
-                                         TENANT_NAME)
+    auth_context = AuthenticationContext("https://login.microsoftonline.com/" + TENANT_NAME)
     token = auth_context.acquire_token_with_client_credentials(
-        resource=resource, client_id=CLIENT_ID,
-        client_secret=CLIENT_SECRET)
+        resource=resource, client_id=CLIENT_ID, client_secret=CLIENT_SECRET
+    )
     return token
diff --git a/src/IntuneCD/get_authparams.py b/src/IntuneCD/get_authparams.py
index f7971963..20f03684 100644
--- a/src/IntuneCD/get_authparams.py
+++ b/src/IntuneCD/get_authparams.py
@@ -21,48 +21,37 @@ def getAuth(mode, localauth, tenant):
     :return: The access token
     """
 
-    if mode == 'devtoprod':
+    if mode == "devtoprod":
         if localauth:
             with open(localauth) as json_data:
                 auth_dict = json.load(json_data)
-            tenant_TENANT_NAME = auth_dict['params'][tenant + '_TENANT_NAME']
-            tenant_CLIENT_ID = auth_dict['params'][tenant + '_CLIENT_ID']
-            tenant_CLIENT_SECRET = auth_dict['params'][tenant +
-                                                       '_CLIENT_SECRET']
+            tenant_TENANT_NAME = auth_dict["params"][tenant + "_TENANT_NAME"]
+            tenant_CLIENT_ID = auth_dict["params"][tenant + "_CLIENT_ID"]
+            tenant_CLIENT_SECRET = auth_dict["params"][tenant + "_CLIENT_SECRET"]
         else:
             tenant_TENANT_NAME = os.environ.get(tenant + "_TENANT_NAME")
             tenant_CLIENT_ID = os.environ.get(tenant + "_CLIENT_ID")
             tenant_CLIENT_SECRET = os.environ.get(tenant + "_CLIENT_SECRET")
-        if ((tenant_TENANT_NAME is None) or (tenant_CLIENT_ID is None)
-                or (tenant_CLIENT_SECRET is None)):
-            raise Exception(
-                "One or more os.environ variables for " +
-                tenant +
-                " not set")
+        if (tenant_TENANT_NAME is None) or (tenant_CLIENT_ID is None) or (tenant_CLIENT_SECRET is None):
+            raise Exception("One or more os.environ variables for " + tenant + " not set")
         else:
-            token = obtain_accesstoken(
-                tenant_TENANT_NAME,
-                tenant_CLIENT_ID,
-                tenant_CLIENT_SECRET,
-                resource)
+            token = obtain_accesstoken(tenant_TENANT_NAME, tenant_CLIENT_ID, tenant_CLIENT_SECRET, resource)
             return token
 
-    elif mode == 'standalone':
+    elif mode == "standalone":
 
         if localauth:
             with open(localauth) as json_data:
                 auth_dict = json.load(json_data)
-            TENANT_NAME = auth_dict['params']['TENANT_NAME']
-            CLIENT_ID = auth_dict['params']['CLIENT_ID']
-            CLIENT_SECRET = auth_dict['params']['CLIENT_SECRET']
+            TENANT_NAME = auth_dict["params"]["TENANT_NAME"]
+            CLIENT_ID = auth_dict["params"]["CLIENT_ID"]
+            CLIENT_SECRET = auth_dict["params"]["CLIENT_SECRET"]
         else:
             TENANT_NAME = os.environ.get("TENANT_NAME")
             CLIENT_ID = os.environ.get("CLIENT_ID")
             CLIENT_SECRET = os.environ.get("CLIENT_SECRET")
-        if ((TENANT_NAME is None) or (CLIENT_ID is None)
-                or (CLIENT_SECRET is None)):
+        if (TENANT_NAME is None) or (CLIENT_ID is None) or (CLIENT_SECRET is None):
             raise Exception("One or more os.environ variables not set")
         else:
-            token = obtain_accesstoken(
-                TENANT_NAME, CLIENT_ID, CLIENT_SECRET, resource)
+            token = obtain_accesstoken(TENANT_NAME, CLIENT_ID, CLIENT_SECRET, resource)
             return token
diff --git a/src/IntuneCD/get_diff_output.py b/src/IntuneCD/get_diff_output.py
deleted file mode 100644
index aee60c53..00000000
--- a/src/IntuneCD/get_diff_output.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env python3
-
-"""
-This module is used to get diff output from the diff.
-"""
-
-import re
-
-
-def get_diff_output(data):
-    """
-    This function takes the data from the diff and returns a string with the differences.
-
-    :param data: The data from the diff
-    :return: A string with the differences
-    """
-    output = []
-
-    for key, value in data.items():
-        setting = re.search(
-            "\\[(.*)\\]", key).group(1).split("[")[-1]
-        new_val = value['new_value']
-        old_val = value['old_value']
-
-        output.append(f"Setting: {setting}, New Value: {new_val}, Old Value: {old_val}")
-
-    return output
diff --git a/src/IntuneCD/graph_batch.py b/src/IntuneCD/graph_batch.py
index 64594491..c0978d82 100644
--- a/src/IntuneCD/graph_batch.py
+++ b/src/IntuneCD/graph_batch.py
@@ -10,7 +10,7 @@
 from .graph_request import makeapirequestPost
 
 
-def batch_request(data, url, extra_url, token, method='GET') -> list:
+def batch_request(data, url, extra_url, token, method="GET") -> list:
     """
     Batch request to the Graph API.
 
@@ -26,33 +26,26 @@ def batch_request(data, url, extra_url, token, method='GET') -> list:
     batch_id = 1
     batch_count = 20
     # Split objects into lists of 20
-    batch_list = [data[i:i + batch_count]
-                  for i in range(0, len(data), batch_count)]
+    batch_list = [data[i : i + batch_count] for i in range(0, len(data), batch_count)]
 
     # Build a body for each ID in the list
     for i in range(0, len(batch_list)):
-        query_data = {'requests': []}
+        query_data = {"requests": []}
         for id in batch_list[i]:
-            body = {
-                'id': batch_id,
-                'method': method,
-                'url': url + id + extra_url
-            }
+            body = {"id": batch_id, "method": method, "url": url + id + extra_url}
 
             batch_id += 1
-            query_data['requests'].append(body)
+            query_data["requests"].append(body)
 
         # POST to the graph batch endpoint
         json_data = json.dumps(query_data)
-        request = makeapirequestPost(
-            'https://graph.microsoft.com/beta/$batch', token, jdata=json_data)
-        request_data = sorted(
-            request['responses'], key=lambda item: item.get("id"))
+        request = makeapirequestPost("https://graph.microsoft.com/beta/$batch", token, jdata=json_data)
+        request_data = sorted(request["responses"], key=lambda item: item.get("id"))
 
         # Append each successful request to responses list
         for resp in request_data:
-            if resp['status'] == 200:
-                responses.append(resp['body'])
+            if resp["status"] == 200:
+                responses.append(resp["body"])
 
     return responses
 
@@ -75,55 +68,62 @@ def batch_assignment(data, url, extra_url, token, app_protection=False) -> list:
 
     # If getting App Protection Assignments, get the platform
     if app_protection is True:
-        for id in data['value']:
-            if id['@odata.type'] == "#microsoft.graph.mdmWindowsInformationProtectionPolicy":
-                data_ids.append(
-                    f"mdmWindowsInformationProtectionPolicies/{id['id']}")
-            if id['@odata.type'] == "#microsoft.graph.windowsInformationProtectionPolicy":
-                data_ids.append(
-                    f"windowsInformationProtectionPolicies/{id['id']}")
+        for id in data["value"]:
+            if id["@odata.type"] == "#microsoft.graph.mdmWindowsInformationProtectionPolicy":
+                data_ids.append(f"mdmWindowsInformationProtectionPolicies/{id['id']}")
+            if id["@odata.type"] == "#microsoft.graph.windowsInformationProtectionPolicy":
+                data_ids.append(f"windowsInformationProtectionPolicies/{id['id']}")
             else:
-                data_ids.append(
-                    f"{str(id['@odata.type']).split('.')[2]}s/{id['id']}")
+                data_ids.append(f"{str(id['@odata.type']).split('.')[2]}s/{id['id']}")
     # Else, just add the objects ID to the list
     else:
-        for id in data['value']:
-            data_ids.append(id['id'])
+        for id in data["value"]:
+            data_ids.append(id["id"])
     # If we have any IDs, batch request the assignments
     if data_ids:
         responses = batch_request(data_ids, url, extra_url, token)
         if responses:
-            group_ids = [val for list in responses for val in list['value']
-                         for keys, val in val.items() if 'target' in keys
-                         for keys, val in val.items() if 'groupId' in keys]
-            filter_ids = [val for list in responses for val in list['value']
-                          for keys, val in val.items() if 'target' in keys
-                          for keys, val in val.items() if 'deviceAndAppManagementAssignmentFilterId' in keys if
-                          val is not None]
+            group_ids = [
+                val
+                for list in responses
+                for val in list["value"]
+                for keys, val in val.items()
+                if "target" in keys
+                for keys, val in val.items()
+                if "groupId" in keys
+            ]
+            filter_ids = [
+                val
+                for list in responses
+                for val in list["value"]
+                for keys, val in val.items()
+                if "target" in keys
+                for keys, val in val.items()
+                if "deviceAndAppManagementAssignmentFilterId" in keys
+                if val is not None
+            ]
 
         # Batch get name of the groups
         if group_ids:
-            group_responses = batch_request(
-                group_ids, 'groups/', '?$select=displayName,id', token)
+            group_responses = batch_request(group_ids, "groups/", "?$select=displayName,id", token)
             for value in responses:
-                if value['value']:
-                    for val in value['value']:
-                        if 'groupId' in val['target']:
+                if value["value"]:
+                    for val in value["value"]:
+                        if "groupId" in val["target"]:
                             for id in group_responses:
-                                if id['id'] == val['target']['groupId']:
-                                    val['target']['groupName'] = id['displayName']
+                                if id["id"] == val["target"]["groupId"]:
+                                    val["target"]["groupName"] = id["displayName"]
 
         # Batch get name of the Filters
         if filter_ids:
-            filter_responses = batch_request(
-                filter_ids, 'deviceManagement/assignmentFilters/', '?$select=displayName', token)
+            filter_responses = batch_request(filter_ids, "deviceManagement/assignmentFilters/", "?$select=displayName", token)
             for value in responses:
-                if value['value']:
-                    for val in value['value']:
-                        if 'deviceAndAppManagementAssignmentFilterId' in val['target']:
+                if value["value"]:
+                    for val in value["value"]:
+                        if "deviceAndAppManagementAssignmentFilterId" in val["target"]:
                             for id in filter_responses:
-                                if id['id'] == val['target']['deviceAndAppManagementAssignmentFilterId']:
-                                    val['target']['deviceAndAppManagementAssignmentFilterId'] = id['displayName']
+                                if id["id"] == val["target"]["deviceAndAppManagementAssignmentFilterId"]:
+                                    val["target"]["deviceAndAppManagementAssignmentFilterId"] = id["displayName"]
 
         return responses
 
@@ -137,50 +137,55 @@ def batch_intents(data, token) -> dict:
     :return: List of responses from the batch request
     """
 
-    base_url = 'deviceManagement'
+    base_url = "deviceManagement"
     template_ids = []
     settings_id = []
     categories_responses = []
     settings_responses = []
-    intent_values = {'value': []}
+    intent_values = {"value": []}
 
     # Get each template ID
-    filtered_data = [val for list in data['value']
-                     for key, val in list.items() if 'templateId' in key and val is not None]
+    filtered_data = [val for list in data["value"] for key, val in list.items() if "templateId" in key and val is not None]
     template_ids = list(dict.fromkeys(filtered_data))
 
     # Batch get all categories from templates
     if template_ids:
-        categories_responses = batch_request(
-            template_ids, f'{base_url}/templates/', '/categories', token)
+        categories_responses = batch_request(template_ids, f"{base_url}/templates/", "/categories", token)
 
     # Build ID for requesting settings for each Intent
     if categories_responses:
-        for intent in data['value']:
-            settings_ids = [val for list in categories_responses if intent['templateId'] is not None
-                            and intent['templateId'] in list['@odata.context']
-                            for val in list['value'] for keys, val in val.items() if 'id' in keys]
+        for intent in data["value"]:
+            settings_ids = [
+                val
+                for list in categories_responses
+                if intent["templateId"] is not None and intent["templateId"] in list["@odata.context"]
+                for val in list["value"]
+                for keys, val in val.items()
+                if "id" in keys
+            ]
             for setting_id in settings_ids:
                 settings_id.append(f"{intent['id']}/categories/{setting_id}")
 
     # Batch get all settings for all Intents
     if settings_id:
-        settings_responses = batch_request(
-            settings_id, f'{base_url}/intents/', '/settings', token)
+        settings_responses = batch_request(settings_id, f"{base_url}/intents/", "/settings", token)
 
     # If the Intent ID is in the responses, save the settings to settingsDelta for the Intent
     if settings_responses:
-        for intent in data['value']:
-            settingsDelta = [val for list in settings_responses if intent['id']
-                             in list['@odata.context'] for val in list['value']]
-            intent_values['value'].append({
-                "id": intent['id'],
-                "displayName": intent['displayName'],
-                "description": intent['description'],
-                "templateId": intent['templateId'],
-                "settingsDelta": settingsDelta,
-                "roleScopeTagIds": intent['roleScopeTagIds']
-            })
+        for intent in data["value"]:
+            settingsDelta = [
+                val for list in settings_responses if intent["id"] in list["@odata.context"] for val in list["value"]
+            ]
+            intent_values["value"].append(
+                {
+                    "id": intent["id"],
+                    "displayName": intent["displayName"],
+                    "description": intent["description"],
+                    "templateId": intent["templateId"],
+                    "settingsDelta": settingsDelta,
+                    "roleScopeTagIds": intent["roleScopeTagIds"],
+                }
+            )
 
     return intent_values
 
@@ -194,13 +199,12 @@ def get_object_assignment(id, responses) -> list:
     :return: List of assignments for the object
     """
 
-    remove_keys = {'id', 'groupId', 'sourceId'}
-    assignments_list = [
-        val for list in responses if id in list['@odata.context'] for val in list['value']]
+    remove_keys = {"id", "groupId", "sourceId"}
+    assignments_list = [val for list in responses if id in list["@odata.context"] for val in list["value"]]
     for value in assignments_list:
         for k in remove_keys:
             value.pop(k, None)
-            value['target'].pop(k, None)
+            value["target"].pop(k, None)
 
     return assignments_list
 
@@ -214,5 +218,5 @@ def get_object_details(id, responses) -> list:
     :return: List of details for the object
     """
 
-    details = [val for list in responses if id in list['@odata.context'] for val in list['value']]
+    details = [val for list in responses if id in list["@odata.context"] for val in list["value"]]
     return details
diff --git a/src/IntuneCD/graph_request.py b/src/IntuneCD/graph_request.py
index f85bdc06..58466795 100644
--- a/src/IntuneCD/graph_request.py
+++ b/src/IntuneCD/graph_request.py
@@ -19,52 +19,50 @@ def makeapirequest(endpoint, token, q_param=None):
     :return: The response from the request.
     """
 
-    headers = {'Content-Type': 'application/json',
-               'Authorization': 'Bearer {0}'.format(token['accessToken'])}
+    headers = {"Content-Type": "application/json", "Authorization": "Bearer {0}".format(token["accessToken"])}
 
     if q_param is not None:
         response = requests.get(endpoint, headers=headers, params=q_param)
         if response.status_code == 504 or response.status_code == 502 or response.status_code == 503:
-            print('Ran into issues with Graph request, waiting 10 seconds and trying again...')
+            print("Ran into issues with Graph request, waiting 10 seconds and trying again...")
             time.sleep(10)
             response = requests.get(endpoint, headers=headers)
         elif response.status_code == 429:
             print(f"Hit Graph throttling, trying again after {response.headers['Retry-After']} seconds")
             while response.status_code == 429:
-                time.sleep(int(response.headers['Retry-After']))
-                response = requests.get(endpoint, headers=headers)   
+                time.sleep(int(response.headers["Retry-After"]))
+                response = requests.get(endpoint, headers=headers)
     else:
         response = requests.get(endpoint, headers=headers)
         if response.status_code == 504 or response.status_code == 502 or response.status_code == 503:
-            print('Ran into issues with Graph request, waiting 10 seconds and trying again...')
+            print("Ran into issues with Graph request, waiting 10 seconds and trying again...")
             time.sleep(10)
             response = requests.get(endpoint, headers=headers)
         elif response.status_code == 429:
             print(f"Hit Graph throttling, trying again after {response.headers['Retry-After']} seconds")
             while response.status_code == 429:
-                time.sleep(int(response.headers['Retry-After']))
-                response = requests.get(endpoint, headers=headers)            
+                time.sleep(int(response.headers["Retry-After"]))
+                response = requests.get(endpoint, headers=headers)
 
     if response.status_code == 200:
         json_data = json.loads(response.text)
 
-        if '@odata.nextLink' in json_data.keys():
-            record = makeapirequest(json_data['@odata.nextLink'], token)
-            entries = len(record['value'])
+        if "@odata.nextLink" in json_data.keys():
+            record = makeapirequest(json_data["@odata.nextLink"], token)
+            entries = len(record["value"])
             count = 0
             while count < entries:
-                json_data['value'].append(record['value'][count])
+                json_data["value"].append(record["value"][count])
                 count += 1
 
-        return (json_data)
+        return json_data
 
     elif response.status_code == 404:
         print("Resource not found in Microsoft Graph: " + endpoint)
     elif ("assignmentFilters" in endpoint) and ("FeatureNotEnabled" in response.text):
         print("Assignment filters not enabled in tenant, skipping")
     else:
-        raise Exception('Request failed with ', response.status_code, ' - ',
-                        response.text)
+        raise Exception("Request failed with ", response.status_code, " - ", response.text)
 
 
 def makeapirequestPatch(patchEndpoint, token, q_param=None, jdata=None, status_code=200):
@@ -78,8 +76,7 @@ def makeapirequestPatch(patchEndpoint, token, q_param=None, jdata=None, status_c
     :param status_code: The status code to expect from the request.
     """
 
-    headers = {'Content-Type': 'application/json',
-               'Authorization': 'Bearer {0}'.format(token['accessToken'])}
+    headers = {"Content-Type": "application/json", "Authorization": "Bearer {0}".format(token["accessToken"])}
 
     if q_param is not None:
         response = requests.patch(patchEndpoint, headers=headers, params=q_param, data=jdata)
@@ -88,8 +85,7 @@ def makeapirequestPatch(patchEndpoint, token, q_param=None, jdata=None, status_c
     if response.status_code == status_code:
         pass
     else:
-        raise Exception('Request failed with ', response.status_code, ' - ',
-                        response.text)
+        raise Exception("Request failed with ", response.status_code, " - ", response.text)
 
 
 def makeapirequestPost(patchEndpoint, token, q_param=None, jdata=None, status_code=200):
@@ -103,8 +99,7 @@ def makeapirequestPost(patchEndpoint, token, q_param=None, jdata=None, status_co
     :param status_code: The status code to expect from the request.
     """
 
-    headers = {'Content-Type': 'application/json',
-               'Authorization': 'Bearer {0}'.format(token['accessToken'])}
+    headers = {"Content-Type": "application/json", "Authorization": "Bearer {0}".format(token["accessToken"])}
 
     if q_param is not None:
         response = requests.post(patchEndpoint, headers=headers, params=q_param, data=jdata)
@@ -117,8 +112,7 @@ def makeapirequestPost(patchEndpoint, token, q_param=None, jdata=None, status_co
         else:
             pass
     else:
-        raise Exception('Request failed with ', response.status_code, ' - ',
-                        response.text)
+        raise Exception("Request failed with ", response.status_code, " - ", response.text)
 
 
 def makeapirequestPut(patchEndpoint, token, q_param=None, jdata=None, status_code=200):
@@ -132,8 +126,7 @@ def makeapirequestPut(patchEndpoint, token, q_param=None, jdata=None, status_cod
     :param status_code: The status code to expect from the request.
     """
 
-    headers = {'Content-Type': 'application/json',
-               'Authorization': 'Bearer {0}'.format(token['accessToken'])}
+    headers = {"Content-Type": "application/json", "Authorization": "Bearer {0}".format(token["accessToken"])}
 
     if q_param is not None:
         response = requests.put(patchEndpoint, headers=headers, params=q_param, data=jdata)
@@ -142,5 +135,4 @@ def makeapirequestPut(patchEndpoint, token, q_param=None, jdata=None, status_cod
     if response.status_code == status_code:
         pass
     else:
-        raise Exception('Request failed with ', response.status_code, ' - ',
-                        response.text)
+        raise Exception("Request failed with ", response.status_code, " - ", response.text)
diff --git a/src/IntuneCD/remove_keys.py b/src/IntuneCD/remove_keys.py
index a20addec..51e41fb5 100644
--- a/src/IntuneCD/remove_keys.py
+++ b/src/IntuneCD/remove_keys.py
@@ -13,29 +13,29 @@ def remove_keys(data):
     """
 
     keys = {
-        'id',
-        'version',
-        'topicIdentifier',
-        'certificate',
-        'createdDateTime',
-        'lastModifiedDateTime',
-        'isDefault'
-        'deployedAppCount',
-        'isAssigned',
-        '@odata.context',
-        'scheduledActionConfigurations@odata.context',
-        'scheduledActionsForRule@odata.context',
-        'sourceId',
-        'supportsScopeTags',
-        'companyCodes',
-        'isGlobalScript',
-        'highestAvailableVersion',
-        'token',
-        'lastSyncDateTime',
-        'isReadOnly',
-        'secretReferenceValueId',
-        'isEncrypted',
-        'modifiedDateTime'}
+        "id",
+        "version",
+        "topicIdentifier",
+        "certificate",
+        "createdDateTime",
+        "lastModifiedDateTime",
+        "isDefault" "deployedAppCount",
+        "isAssigned",
+        "@odata.context",
+        "scheduledActionConfigurations@odata.context",
+        "scheduledActionsForRule@odata.context",
+        "sourceId",
+        "supportsScopeTags",
+        "companyCodes",
+        "isGlobalScript",
+        "highestAvailableVersion",
+        "token",
+        "lastSyncDateTime",
+        "isReadOnly",
+        "secretReferenceValueId",
+        "isEncrypted",
+        "modifiedDateTime",
+    }
     for k in keys:
         data.pop(k, None)
 
diff --git a/src/IntuneCD/run_backup.py b/src/IntuneCD/run_backup.py
index 47cc7f2e..b9c2a522 100644
--- a/src/IntuneCD/run_backup.py
+++ b/src/IntuneCD/run_backup.py
@@ -32,19 +32,18 @@
 
 
 def start():
-    parser = argparse.ArgumentParser(
-        description="Save backup of Intune configurations")
+    parser = argparse.ArgumentParser(description="Save backup of Intune configurations")
     parser.add_argument(
         "-o",
         "--output",
-        help='The format backups will be saved as, valid options are json or yaml. Default is json',
+        help="The format backups will be saved as, valid options are json or yaml. Default is json",
         type=str,
         default="json",
     )
     parser.add_argument(
         "-p",
         "--path",
-        help='The path to which the configurations will be saved. Default value is $(Build.SourcesDirectory)',
+        help="The path to which the configurations will be saved. Default value is $(Build.SourcesDirectory)",
         type=str,
         default=REPO_DIR,
     )
@@ -54,17 +53,21 @@ def start():
         help=(
             "The mode in which the script is run, 0 = devtoprod (backup from dev -> update to prod) "
             "uses os.environ DEV_TENANT_NAME, DEV_CLIENT_ID, DEV_CLIENT_SECRET, "
-            "1 = standalone (backup from prod) uses os.environ TENANT_NAME, CLIENT_ID, CLIENT_SECRET"),
+            "1 = standalone (backup from prod) uses os.environ TENANT_NAME, CLIENT_ID, CLIENT_SECRET"
+        ),
         type=int,
-        default=0)
+        default=0,
+    )
     parser.add_argument(
         "-a",
         "--localauth",
         help=(
             "When this paramater is set, provide a path to a local dict file containing the following keys: "
             "params:TENANT_NAME, CLIENT_ID, CLIENT_SECRET when run in standalone mode and "
-            "params:DEV_TENANT_NAME, DEV_CLIENT_ID, DEV_CLIENT_SECRET when run in devtoprod"),
-        type=str)
+            "params:DEV_TENANT_NAME, DEV_CLIENT_ID, DEV_CLIENT_SECRET when run in devtoprod"
+        ),
+        type=str,
+    )
     parser.add_argument(
         "-e",
         "--exclude",
@@ -93,17 +96,14 @@ def start():
             "PowershellScripts",
             "ShellScripts",
             "ConfigurationPolicies",
-            "ConditionalAccess"],
-        nargs='+')
-    parser.add_argument(
-        "-f",
-        "--frontend",
-        help="Set the frontend URL to update with configuration count and backup stream",
-        type=str)
+            "ConditionalAccess",
+        ],
+        nargs="+",
+    )
     parser.add_argument(
-        "-ap", "--autopilot",
-        help="If set to True, a record of autopilot devices will be saved"
+        "-f", "--frontend", help="Set the frontend URL to update with configuration count and backup stream", type=str
     )
+    parser.add_argument("-ap", "--autopilot", help="If set to True, a record of autopilot devices will be saved")
 
     args = parser.parse_args()
 
@@ -113,10 +113,7 @@ def devtoprod():
     def standalone():
         return "standalone"
 
-    switcher = {
-        0: devtoprod,
-        1: standalone
-    }
+    switcher = {0: devtoprod, 1: standalone}
 
     def selected_mode(argument):
         func = switcher.get(argument, "nothing")
@@ -130,106 +127,129 @@ def run_backup(path, output, exclude, token):
 
         if "AppConfigurations" not in exclude:
             from .backup_appConfiguration import savebackup
+
             config_count += savebackup(path, output, exclude, token)
 
         if "AppProtection" not in exclude:
             from .backup_AppProtection import savebackup
+
             config_count += savebackup(path, output, exclude, token)
 
         if "APNs" not in exclude:
             from .backup_apns import savebackup
+
             config_count += savebackup(path, output, token)
 
         if "VPP" not in exclude:
             from .backup_vppTokens import savebackup
+
             config_count += savebackup(path, output, token)
 
         if "Applications" not in exclude:
             from .backup_applications import savebackup
+
             config_count += savebackup(path, output, exclude, token)
 
         if "Compliance" not in exclude:
             from .backup_compliance import savebackup
+
             config_count += savebackup(path, output, exclude, token)
 
         if "NotificationTemplate" not in exclude:
             from .backup_notificationTemplate import savebackup
+
             config_count += savebackup(path, output, token)
 
         if "Profiles" not in exclude:
             from .backup_profiles import savebackup
+
             config_count += savebackup(path, output, exclude, token)
 
         if "GPOConfigurations" not in exclude:
             from .backup_groupPolicyConfiguration import savebackup
+
             config_count += savebackup(path, output, exclude, token)
 
         if "AppleEnrollmentProfile" not in exclude:
             from .backup_appleEnrollmentProfile import savebackup
+
             config_count += savebackup(path, output, token)
 
         if "WindowsEnrollmentProfile" not in exclude:
             from .backup_windowsEnrollmentProfile import savebackup
+
             config_count += savebackup(path, output, exclude, token)
 
         if "EnrollmentStatusPage" not in exclude:
             from .backup_enrollmentStatusPage import savebackup
+
             config_count += savebackup(path, output, exclude, token)
-        
+
         if args.autopilot == "True":
             from .backup_autopilotDevices import savebackup
+
             savebackup(path, output, token)
 
         if "Filters" not in exclude:
             from .backup_assignmentFilters import savebackup
+
             config_count += savebackup(path, output, token)
 
         if "ManagedGooglePlay" not in exclude:
             from .backup_managedGPlay import savebackup
+
             config_count += savebackup(path, output, token)
 
         if "Intents" not in exclude:
             from .backup_managementIntents import savebackup
+
             config_count += savebackup(path, output, exclude, token)
 
         if "CompliancePartner" not in exclude:
             from .backup_compliancePartner import savebackup
+
             config_count += savebackup(path, output, token)
 
         if "ManagementPartner" not in exclude:
             from .backup_managementPartner import savebackup
+
             config_count += savebackup(path, output, token)
 
         if "RemoteAssistancePartner" not in exclude:
             from .backup_remoteAssistancePartner import savebackup
+
             config_count += savebackup(path, output, token)
 
         if "ProactiveRemediation" not in exclude:
             from .backup_proactiveRemediation import savebackup
+
             config_count += savebackup(path, output, exclude, token)
 
         if "PowershellScripts" not in exclude:
             from .backup_powershellScripts import savebackup
+
             config_count += savebackup(path, output, exclude, token)
 
         if "ShellScripts" not in exclude:
             from .backup_shellScripts import savebackup
+
             config_count += savebackup(path, output, exclude, token)
 
         if "ConfigurationPolicies" not in exclude:
             from .backup_configurationPolicies import savebackup
+
             config_count += savebackup(path, output, exclude, token)
 
         if "ConditionalAccess" not in exclude:
             from .backup_conditionalAccess import savebackup
+
             config_count += savebackup(path, output, token)
 
         return config_count
 
-    if args.output == 'json' or args.output == 'yaml':
+    if args.output == "json" or args.output == "yaml":
         if token is None:
-            raise Exception(
-                "Token is empty, please check os.environ variables")
+            raise Exception("Token is empty, please check os.environ variables")
 
         if args.exclude:
             exclude = args.exclude
@@ -245,23 +265,17 @@ def run_backup(path, output, exclude, token):
             feed_bytes = feedstdout.getvalue().encode("utf-8")
             out = base64.b64encode(feed_bytes).decode("utf-8")
 
-            body = {
-                "type": "config_count",
-                "config_count": count
-            }
-            update_frontend(f'{args.frontend}/api/overview/summary', body)
+            body = {"type": "config_count", "config_count": count}
+            update_frontend(f"{args.frontend}/api/overview/summary", body)
 
-            body = {
-                "type": "backup",
-                "feed": out
-            }
-            update_frontend(f'{args.frontend}/api/feed/update', body)
+            body = {"type": "backup", "feed": out}
+            update_frontend(f"{args.frontend}/api/feed/update", body)
 
         else:
             run_backup(args.path, args.output, exclude, token)
 
     else:
-        print('Please enter a valid output format, json or yaml')
+        print("Please enter a valid output format, json or yaml")
 
 
 if __name__ == "__main__":
diff --git a/src/IntuneCD/run_documentation.py b/src/IntuneCD/run_documentation.py
index 2ca63281..252ec1a7 100644
--- a/src/IntuneCD/run_documentation.py
+++ b/src/IntuneCD/run_documentation.py
@@ -32,47 +32,38 @@
 
 def start():
     parser = argparse.ArgumentParser(description="Create markdown document from backup files")
+    parser.add_argument("-p", "--path", help="Path to where the backup is saved, default is REPO_DIR", default=REPO_DIR)
     parser.add_argument(
-        "-p", "--path",
-        help='Path to where the backup is saved, default is REPO_DIR',
-        default=REPO_DIR
+        "-o", "--outpath", help="The path to save the document, default is REPO_DIR/README.md", default=f"{REPO_DIR}/README.md"
     )
+    parser.add_argument("-t", "--tenantname", help="Name of the tenant")
     parser.add_argument(
-        "-o", "--outpath",
-        help='The path to save the document, default is REPO_DIR/README.md',
-        default=f'{REPO_DIR}/README.md'
+        "-i",
+        "--intro",
+        help="Introduction that will be added to the top of the document",
+        default="This document contains documentation of all configurations exported by the IntuneCD tool",
     )
     parser.add_argument(
-        '-t', '--tenantname',
-        help='Name of the tenant'
-    )
-    parser.add_argument(
-        '-i', '--intro',
-        help='Introduction that will be added to the top of the document',
-        default='This document contains documentation of all configurations exported by the IntuneCD tool'
-    )
-    parser.add_argument(
-        '-j', '--jsondata',
+        "-j",
+        "--jsondata",
         help='Lets you configure line 1-4 using a JSON string: "{\\"title\\": \\"demo\\", \\"intro\\": \\"demo\\", '
-             '\\"tenant\\": \\"demo\\", \\"updated\\": \\"demo\\"}" '
+        '\\"tenant\\": \\"demo\\", \\"updated\\": \\"demo\\"}" ',
     )
     parser.add_argument(
-        '-m', '--maxlength',
+        "-m",
+        "--maxlength",
         help='Maximum length of the configuration value, values with a higher count will be displayed with "Value '
-             'too long to display"',
-        type=int
-    )
-    parser.add_argument(
-        '-s', '--split',
-        help='Split the documentation into multiple files and create index.md in the configpath directory with a '
-             'list of all files',
-        action="store_true"
+        'too long to display"',
+        type=int,
     )
     parser.add_argument(
-        '-c', '--cleanup',
-        help='If set, will remove all table rows with an empty value',
-        action='store_true'
+        "-s",
+        "--split",
+        help="Split the documentation into multiple files and create index.md in the configpath directory with a "
+        "list of all files",
+        action="store_true",
     )
+    parser.add_argument("-c", "--cleanup", help="If set, will remove all table rows with an empty value", action="store_true")
 
     args = parser.parse_args()
 
@@ -85,95 +76,98 @@ def run_documentation(configpath, outpath, tenantname, jsondata, maxlength, spli
             md_file(outpath)
 
         # Document App Configuration
-        document_configs(f'{configpath}/App Configuration', outpath, 'App Configuration', maxlength, split, cleanup)
+        document_configs(f"{configpath}/App Configuration", outpath, "App Configuration", maxlength, split, cleanup)
 
         # Document App Protection
-        document_configs(f'{configpath}/App Protection', outpath, 'App Protection', maxlength, split, cleanup)
+        document_configs(f"{configpath}/App Protection", outpath, "App Protection", maxlength, split, cleanup)
 
         # Document Apple Push Notification
-        document_configs(f'{configpath}/Apple Push Notification', outpath, 'Apple Push Notification', maxlength, split,
-                         cleanup)
+        document_configs(
+            f"{configpath}/Apple Push Notification", outpath, "Apple Push Notification", maxlength, split, cleanup
+        )
 
         # Document Apple VPP Tokens
-        document_configs(f'{configpath}/Apple VPP Tokens', outpath, 'Apple VPP Tokens', maxlength, split, cleanup)
+        document_configs(f"{configpath}/Apple VPP Tokens", outpath, "Apple VPP Tokens", maxlength, split, cleanup)
 
         # Document iOS Applications
-        document_configs(f'{configpath}/Applications/iOS', outpath, 'iOS Applications', maxlength, split, cleanup)
+        document_configs(f"{configpath}/Applications/iOS", outpath, "iOS Applications", maxlength, split, cleanup)
 
         # Document macOS Applications
-        document_configs(f'{configpath}/Applications/macOS', outpath, 'macOS Applications', maxlength, split, cleanup)
+        document_configs(f"{configpath}/Applications/macOS", outpath, "macOS Applications", maxlength, split, cleanup)
 
         # Document Android Applications
-        document_configs(f'{configpath}/Applications/Android', outpath, 'Android Applications', maxlength, split,
-                         cleanup)
+        document_configs(f"{configpath}/Applications/Android", outpath, "Android Applications", maxlength, split, cleanup)
 
         # Document Windows Applications
-        document_configs(f'{configpath}/Applications/Windows', outpath, 'Windows Applications', maxlength, split,
-                         cleanup)
+        document_configs(f"{configpath}/Applications/Windows", outpath, "Windows Applications", maxlength, split, cleanup)
 
         # Document Web Apps
-        document_configs(f'{configpath}/Applications/Web App', outpath, 'Web Applications', maxlength, split, cleanup)
+        document_configs(f"{configpath}/Applications/Web App", outpath, "Web Applications", maxlength, split, cleanup)
 
         # Document Office Suite apps
-        document_configs(f'{configpath}/Applications/Office Suite', outpath, 'Office Suite Applications', maxlength,
-                         split, cleanup)
+        document_configs(
+            f"{configpath}/Applications/Office Suite", outpath, "Office Suite Applications", maxlength, split, cleanup
+        )
 
         # Document compliance
-        document_configs(f'{configpath}/Compliance Policies/Policies', outpath, 'Compliance Policies', maxlength, split,
-                         cleanup)
+        document_configs(
+            f"{configpath}/Compliance Policies/Policies", outpath, "Compliance Policies", maxlength, split, cleanup
+        )
 
         # Message Templates
-        document_configs(f'{configpath}/Compliance Policies/Message Templates', outpath, 'Message Templates', maxlength,
-                         split, cleanup)
+        document_configs(
+            f"{configpath}/Compliance Policies/Message Templates", outpath, "Message Templates", maxlength, split, cleanup
+        )
 
         # Conditional Access
-        document_configs(f'{configpath}/Conditional Access', outpath, 'Conditional Access', maxlength, split, cleanup)
+        document_configs(f"{configpath}/Conditional Access", outpath, "Conditional Access", maxlength, split, cleanup)
 
         # Document profiles
-        document_configs(f'{configpath}/Device Configurations', outpath, 'Configuration Profiles', maxlength, split,
-                         cleanup)
+        document_configs(f"{configpath}/Device Configurations", outpath, "Configuration Profiles", maxlength, split, cleanup)
 
         # Document Group Policy Configurations
-        document_configs(f'{configpath}/Group Policy Configurations', outpath, 'Group Policy Configurations', maxlength,
-                         split, cleanup)
+        document_configs(
+            f"{configpath}/Group Policy Configurations", outpath, "Group Policy Configurations", maxlength, split, cleanup
+        )
 
         # Document Apple Enrollment Profiles
-        document_configs(f'{configpath}/Enrollment Profiles/Apple', outpath, 'Apple Enrollment Profiles', maxlength,
-                         split, cleanup)
+        document_configs(
+            f"{configpath}/Enrollment Profiles/Apple", outpath, "Apple Enrollment Profiles", maxlength, split, cleanup
+        )
 
         # Document Windows Enrollment Profiles
-        document_configs(f'{configpath}/Enrollment Profiles/Windows', outpath, 'Windows Enrollment Profiles', maxlength,
-                         split, cleanup)
+        document_configs(
+            f"{configpath}/Enrollment Profiles/Windows", outpath, "Windows Enrollment Profiles", maxlength, split, cleanup
+        )
 
         # Document Enrollment Status Page profiles
-        document_configs(f'{configpath}/Enrollment Profiles/Windows/ESP', outpath, 'Enrollment Status Page', maxlength,
-                         split, cleanup)
+        document_configs(
+            f"{configpath}/Enrollment Profiles/Windows/ESP", outpath, "Enrollment Status Page", maxlength, split, cleanup
+        )
 
         # Document filters
-        document_configs(f'{configpath}/Filters', outpath, 'Filters', maxlength, split, cleanup)
+        document_configs(f"{configpath}/Filters", outpath, "Filters", maxlength, split, cleanup)
 
         # Managed Google Play
-        document_configs(f'{configpath}/Managed Google Play', outpath, 'Managed Google Play', maxlength, split, cleanup)
+        document_configs(f"{configpath}/Managed Google Play", outpath, "Managed Google Play", maxlength, split, cleanup)
 
         # Document Intents
-        document_management_intents(f'{configpath}/Management Intents/', outpath, 'Management Intents', split)
+        document_management_intents(f"{configpath}/Management Intents/", outpath, "Management Intents", split)
 
         # Document Partner Connections
-        document_configs(f'{configpath}/Partner Connections/', outpath, 'Partner Connections', maxlength, split,
-                         cleanup)
+        document_configs(f"{configpath}/Partner Connections/", outpath, "Partner Connections", maxlength, split, cleanup)
 
         # Document Proactive Remediations
-        document_configs(f'{configpath}/Proactive Remediations', outpath, 'Proactive Remediations', maxlength, split,
-                         cleanup)
+        document_configs(f"{configpath}/Proactive Remediations", outpath, "Proactive Remediations", maxlength, split, cleanup)
 
         # Document Shell Scripts
-        document_configs(f'{configpath}/Scripts/Shell', outpath, 'Shell Scripts', maxlength, split, cleanup)
+        document_configs(f"{configpath}/Scripts/Shell", outpath, "Shell Scripts", maxlength, split, cleanup)
 
         # Document Powershell Scripts
-        document_configs(f'{configpath}/Scripts/Powershell', outpath, 'Powershell Scripts', maxlength, split, cleanup)
+        document_configs(f"{configpath}/Scripts/Powershell", outpath, "Powershell Scripts", maxlength, split, cleanup)
 
         # Document Settings Catalog
-        document_configs(f'{configpath}/Settings Catalog', outpath, 'Settings Catalog', maxlength, split, cleanup)
+        document_configs(f"{configpath}/Settings Catalog", outpath, "Settings Catalog", maxlength, split, cleanup)
 
         if jsondata:
             json_dict = json.loads(jsondata)
@@ -188,43 +182,43 @@ def run_documentation(configpath, outpath, tenantname, jsondata, maxlength, spli
             if "tenant" in json_dict:
                 tenant = json_dict["tenant"]
             else:
-                tenant = f'**Tenant:** {tenantname}'
+                tenant = f"**Tenant:** {tenantname}"
             if "updated" in json_dict:
                 updated = json_dict["updated"]
             else:
-                updated = f'**Document updated on:**'
+                updated = f"**Document updated on:**"
         else:
             title = "MEM Documentation"
             intro = args.intro
-            tenant = f'**Tenant:** {tenantname}'
-            updated = f'**Document updated on:**'
+            tenant = f"**Tenant:** {tenantname}"
+            updated = f"**Document updated on:**"
 
         if split:
             files = get_md_files(configpath)
-            index_md = f'{configpath}/index.md'
+            index_md = f"{configpath}/index.md"
             md_file(index_md)
 
-            with open(index_md, 'w') as doc:
-                l1 = f'# {title} \n\n'
-                l2 = f'{intro} \n\n'
-                l3 = f'{tenant} \n\n'
-                l4 = f'{updated} {current_date} \n\n'
-                l5 = '## File index \n\n'
+            with open(index_md, "w") as doc:
+                l1 = f"# {title} \n\n"
+                l2 = f"{intro} \n\n"
+                l3 = f"{tenant} \n\n"
+                l4 = f"{updated} {current_date} \n\n"
+                l5 = "## File index \n\n"
                 doc.writelines([l1, l2, l3, l4, l5])
                 for file in files:
-                    doc.writelines(['[', str(file).split('/')[-1], '](', str(file).replace(" ", "%20"), ') \n\n'])
+                    doc.writelines(["[", str(file).split("/")[-1], "](", str(file).replace(" ", "%20"), ") \n\n"])
 
         else:
             document = markdown_toclify(input_file=outpath, back_to_top=True, exclude_h=[3])
-            with open(outpath, 'w') as doc:
-                l1 = f'# {title} \n\n'
-                l2 = f'{intro} \n\n'
-                l3 = f'{tenant} \n\n'
-                l4 = f'{updated} {current_date} \n\n'
+            with open(outpath, "w") as doc:
+                l1 = f"# {title} \n\n"
+                l2 = f"{intro} \n\n"
+                l3 = f"{tenant} \n\n"
+                l4 = f"{updated} {current_date} \n\n"
                 doc.writelines([l1, l2, l3, l4, document])
 
     run_documentation(args.path, args.outpath, args.tenantname, args.jsondata, args.maxlength, args.split, args.cleanup)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     start()
diff --git a/src/IntuneCD/run_update.py b/src/IntuneCD/run_update.py
index 0604582f..7fa03b24 100644
--- a/src/IntuneCD/run_update.py
+++ b/src/IntuneCD/run_update.py
@@ -23,6 +23,7 @@
 import sys
 import base64
 import argparse
+import json
 
 from io import StringIO
 from .get_authparams import getAuth
@@ -33,11 +34,12 @@
 
 def start():
     parser = argparse.ArgumentParser(
-        description="Update Intune configurations with values from backup")
+        description="Update Intune configurations with values from backup"
+    )
     parser.add_argument(
         "-p",
         "--path",
-        help='The path to which the configurations are saved. Default value is $(Build.SourcesDirectory)',
+        help="The path to which the configurations are saved. Default value is $(Build.SourcesDirectory)",
         default=REPO_DIR,
     )
     parser.add_argument(
@@ -46,26 +48,32 @@ def start():
         help=(
             "The mode in which the script is run, 0 = devtoprod (backup from dev -> update to prod) "
             "uses os.environ PROD_TENANT_NAME, PROD_CLIENT_ID, PROD_CLIENT_SECRET, "
-            "1 = standalone (backup from prod) uses os.environ TENANT_NAME, CLIENT_ID, CLIENT_SECRET"),
+            "1 = standalone (backup from prod) uses os.environ TENANT_NAME, CLIENT_ID, CLIENT_SECRET"
+        ),
         type=int,
-        default=0)
+        default=0,
+    )
     parser.add_argument(
         "-a",
         "--localauth",
         help=(
             "When this paramater is set, provide a path to a local dict file containing the following keys: "
             "params:TENANT_NAME, CLIENT_ID, CLIENT_SECRET when run in standalone mode and "
-            "params:PROD_TENANT_NAME, PROD_CLIENT_ID, PROD_CLIENT_SECRET when run in devtoprod"),
-        type=str)
+            "params:PROD_TENANT_NAME, PROD_CLIENT_ID, PROD_CLIENT_SECRET when run in devtoprod"
+        ),
+        type=str,
+    )
     parser.add_argument(
         "-u",
         help="When this parameter is set, assignments are updated for all configurations",
-        action="store_true")
+        action="store_true",
+    )
     parser.add_argument(
         "-f",
         "--frontend",
         help="Set the frontend URL to update with configuration count and backup stream",
-        type=str)
+        type=str,
+    )
     parser.add_argument(
         "-e",
         "--exclude",
@@ -85,8 +93,16 @@ def start():
             "PowershellScripts",
             "ShellScripts",
             "ConfigurationPolicies",
-            "ConditionalAccess"],
-        nargs='+')
+            "ConditionalAccess",
+        ],
+        nargs="+",
+    )
+    parser.add_argument(
+        "-r",
+        "--report",
+        help="When this parameter is set, no updates are pushed to Intune but the change summary is pushed to the frontend",
+        action="store_true",
+    )
 
     args = parser.parse_args()
 
@@ -96,10 +112,7 @@ def devtoprod():
     def standalone():
         return "standalone"
 
-    switcher = {
-        0: devtoprod,
-        1: standalone
-    }
+    switcher = {0: devtoprod, 1: standalone}
 
     def selected_mode(argument):
         func = switcher.get(argument, "nothing")
@@ -107,71 +120,91 @@ def selected_mode(argument):
 
     token = getAuth(selected_mode(args.mode), args.localauth, tenant="PROD")
 
-    def run_update(path, token, assignment, exclude):
+    def run_update(path, token, assignment, exclude, report):
 
         diff_count = 0
+        diff_summary = []
 
         if "AppConfigurations" not in exclude:
             from .update_appConfiguration import update
-            diff_count += update(path, token, assignment)
+
+            diff_summary.append(update(path, token, assignment, report))
 
         if "AppProtection" not in exclude:
             from .update_appProtection import update
-            diff_count += update(path, token, assignment)
+
+            diff_summary.append(update(path, token, assignment, report))
 
         if "Compliance" not in exclude:
             from .update_compliance import update
-            diff_count += update(path, token, assignment)
+
+            diff_summary.append(update(path, token, assignment, report))
 
         if "NotificationTemplate" not in exclude:
             from .update_notificationTemplate import update
-            diff_count += update(path, token)
+
+            diff_summary.append(update(path, token, report))
 
         if "Profiles" not in exclude:
             from .update_profiles import update
-            diff_count += update(path, token, assignment)
+
+            diff_summary.append(update(path, token, assignment, report))
 
         if "AppleEnrollmentProfile" not in exclude:
             from .update_appleEnrollmentProfile import update
-            diff_count += update(path, token)
+
+            diff_summary.append(update(path, token, report))
 
         if "WindowsEnrollmentProfile" not in exclude:
             from .update_windowsEnrollmentProfile import update
-            diff_count += update(path, token, assignment)
+
+            diff_summary.append(update(path, token, assignment, report))
 
         if "EnrollmentStatusPage" not in exclude:
             from .update_enrollmentStatusPage import update
-            diff_count += update(path, token, assignment)
+
+            diff_summary.append(update(path, token, assignment, report))
 
         if "Filters" not in exclude:
             from .update_assignmentFilter import update
-            diff_count += update(path, token)
+
+            diff_summary.append(update(path, token, report))
 
         if "Intents" not in exclude:
             from .update_managementIntents import update
-            diff_count += update(path, token, assignment)
+
+            diff_summary.append(update(path, token, assignment, report))
 
         if "ProactiveRemediation" not in exclude:
             from .update_proactiveRemediation import update
-            diff_count += update(path, token, assignment)
+
+            diff_summary.append(update(path, token, assignment, report))
 
         if "PowershellScripts" not in exclude:
             from .update_powershellScripts import update
-            diff_count += update(path, token, assignment)
+
+            diff_summary.append(update(path, token, assignment, report))
 
         if "ShellScripts" not in exclude:
             from .update_shellScripts import update
-            diff_count += update(path, token, assignment)
+
+            diff_summary.append(update(path, token, assignment, report))
 
         if "ConfigurationPolicies" not in exclude:
             from .update_configurationPolicies import update
-            diff_count += update(path, token, assignment)
+
+            diff_summary.append(update(path, token, assignment, report))
 
         if "ConditionalAccess" not in exclude:
             from .update_conditionalAccess import update
-            diff_count += update(path, token)
 
-        return diff_count
+            diff_count += update(path, token, report)
+
+        for sum in diff_summary:
+            for config in sum:
+                diff_count += config.count
+
+        return diff_count, diff_summary
 
     if token is None:
         raise Exception("Token is empty, please check os.environ variables")
@@ -182,29 +215,41 @@ def run_update(path, token, assignment, exclude):
         else:
             exclude = []
 
+        if args.report:
+            print("***Running in report mode, no updates will be pushed to Intune***")
+
         if args.frontend:
 
             old_stdout = sys.stdout
             sys.stdout = feedstdout = StringIO()
-            count = run_update(args.path, token, args.u, exclude)
+            summary = run_update(args.path, token, args.u, exclude, args.report)
             sys.stdout = old_stdout
             feed_bytes = feedstdout.getvalue().encode("utf-8")
             out = base64.b64encode(feed_bytes).decode("utf-8")
 
-            body = {
-                "type": "diff_count",
-                "diff_count": count
-            }
-            update_frontend(f'{args.frontend}/api/overview/summary', body)
+            body = {"type": "diff_count", "diff_count": summary[0]}
+            update_frontend(f"{args.frontend}/api/overview/summary", body)
+
+            body = {"type": "update", "feed": out}
+            update_frontend(f"{args.frontend}/api/feed/update", body)
+
+            body = []
+            for sum in summary[1]:
+                for config in sum:
+                    if config.diffs:
+                        body.append(
+                            {
+                                "name": config.name,
+                                "type": config.type,
+                                "diffs": config.diffs,
+                            }
+                        )
 
-            body = {
-                "type": "update",
-                "feed": out
-            }
-            update_frontend(f'{args.frontend}/api/feed/update', body)
+            if len(body) > 0:
+                update_frontend(f"{args.frontend}/api/changes/summary", body)
 
         else:
-            run_update(args.path, token, args.u, exclude)
+            run_update(args.path, token, args.u, exclude, args.report)
 
 
 if __name__ == "__main__":
diff --git a/src/IntuneCD/save_output.py b/src/IntuneCD/save_output.py
index 3ad07c6a..a43f1d6c 100644
--- a/src/IntuneCD/save_output.py
+++ b/src/IntuneCD/save_output.py
@@ -22,12 +22,11 @@ def save_output(output, configpath, fname, data):
     if not os.path.exists(configpath):
         os.makedirs(configpath)
 
-    if output == 'yaml':
-        with open(configpath + fname + ".yaml", 'w') as yamlFile:
-            yaml.dump(data, yamlFile, sort_keys=False,
-                      default_flow_style=False)
-    elif output == 'json':
-        with open(configpath + fname + ".json", 'w') as jsonFile:
+    if output == "yaml":
+        with open(configpath + fname + ".yaml", "w") as yamlFile:
+            yaml.dump(data, yamlFile, sort_keys=False, default_flow_style=False)
+    elif output == "json":
+        with open(configpath + fname + ".json", "w") as jsonFile:
             json.dump(data, jsonFile, indent=10)
 
     else:
diff --git a/src/IntuneCD/update_appConfiguration.py b/src/IntuneCD/update_appConfiguration.py
index b70732bc..a0201987 100644
--- a/src/IntuneCD/update_appConfiguration.py
+++ b/src/IntuneCD/update_appConfiguration.py
@@ -12,16 +12,18 @@
 from .graph_batch import batch_assignment, get_object_assignment
 from .update_assignment import update_assignment, post_assignment_update
 from .remove_keys import remove_keys
-from .get_diff_output import get_diff_output
+from .diff_summary import DiffSummary
 from .check_file import check_file
 from .load_file import load_file
 
 # Set MS Graph endpoint
-ENDPOINT = "https://graph.microsoft.com/beta/deviceAppManagement/mobileAppConfigurations"
+ENDPOINT = (
+    "https://graph.microsoft.com/beta/deviceAppManagement/mobileAppConfigurations"
+)
 APP_ENDPOINT = "https://graph.microsoft.com/beta/deviceAppManagement/mobileApps"
 
 
-def update(path, token, assignment=False):
+def update(path, token, assignment=False, report=False):
     """
     This function updates all App Configuration Polices in Intune,
     if the configuration in Intune differs from the JSON/YAML file.
@@ -31,7 +33,7 @@ def update(path, token, assignment=False):
     :param assignment: Boolean to determine if assignments should be updated
     """
 
-    diff_count = 0
+    diff_summary = []
     # Set App Configuration path
     configpath = path + "/" + "App Configuration/"
     # If App Configuration path exists, continue
@@ -42,9 +44,10 @@ def update(path, token, assignment=False):
         # Get current assignments
         mem_assignments = batch_assignment(
             mem_data,
-            'deviceAppManagement/mobileAppConfigurations/',
-            '/assignments',
-            token)
+            "deviceAppManagement/mobileAppConfigurations/",
+            "/assignments",
+            token,
+        )
 
         for filename in os.listdir(configpath):
             file = check_file(configpath, filename)
@@ -58,36 +61,32 @@ def update(path, token, assignment=False):
                 # Create object to pass in to assignment function
                 assign_obj = {}
                 if "assignments" in repo_data:
-                    assign_obj = repo_data['assignments']
-                repo_data.pop('assignments', None)
+                    assign_obj = repo_data["assignments"]
+                repo_data.pop("assignments", None)
 
                 # If App Configuration exists, continue
-                data = {'value': ''}
-                if mem_data['value']:
-                    for val in mem_data['value']:
-                        if repo_data['@odata.type'] == val['@odata.type'] and \
-                                repo_data['displayName'] == val['displayName']:
-                            data['value'] = val
-
-                if data['value']:
+                data = {"value": ""}
+                if mem_data["value"]:
+                    for val in mem_data["value"]:
+                        if (
+                            repo_data["@odata.type"] == val["@odata.type"]
+                            and repo_data["displayName"] == val["displayName"]
+                        ):
+                            data["value"] = val
+
+                if data["value"]:
                     print("-" * 90)
-                    mem_id = data['value']['id']
+                    mem_id = data["value"]["id"]
                     # Remove keys before using DeepDiff
                     data = remove_keys(data)
-                    repo_data.pop('targetedMobileApps', None)
+                    repo_data.pop("targetedMobileApps", None)
 
-                    diff = DeepDiff(
-                        data['value'], repo_data, ignore_order=True).get(
-                        'values_changed', {})
+                    diff = DeepDiff(data["value"], repo_data, ignore_order=True).get(
+                        "values_changed", {}
+                    )
 
                     # If any changed values are found, push them to Intune
-                    if diff:
-                        diff_count += 1
-                        print("Updating App configuration: " +
-                              repo_data['displayName'] + ", values changed:")
-                        values = get_diff_output(diff)
-                        for value in values:
-                            print(value)
+                    if diff and report is False:
                         request_data = json.dumps(repo_data)
                         q_param = None
                         makeapirequestPatch(
@@ -95,69 +94,85 @@ def update(path, token, assignment=False):
                             token,
                             q_param,
                             request_data,
-                            status_code=204)
-                    else:
-                        print(
-                            'No difference found for App configuration: ' +
-                            repo_data['displayName'])
+                            status_code=204,
+                        )
+
+                    diff_config = DiffSummary(
+                        data=diff,
+                        name=repo_data["displayName"],
+                        type="App Configuration",
+                    )
+
+                    diff_summary.append(diff_config)
 
                     if assignment:
-                        mem_assign_obj = get_object_assignment(
-                            mem_id, mem_assignments)
-                        update = update_assignment(
-                            assign_obj, mem_assign_obj, token)
+                        mem_assign_obj = get_object_assignment(mem_id, mem_assignments)
+                        update = update_assignment(assign_obj, mem_assign_obj, token)
                         if update is not None:
-                            request_data = {}
-                            request_data['assignments'] = update
+                            request_data = {"assignments": update}
                             post_assignment_update(
                                 request_data,
                                 mem_id,
-                                'deviceAppManagement/mobileAppConfigurations/',
-                                '/microsoft.graph.managedDeviceMobileAppConfiguration/assign',
-                                token)
+                                "deviceAppManagement/mobileAppConfigurations/",
+                                "/microsoft.graph.managedDeviceMobileAppConfiguration/assign",
+                                token,
+                            )
 
                 # If App Configuration does not exist, create it and assign
                 else:
                     print("-" * 90)
-                    print("App Configuration not found, creating: " +
-                          repo_data['displayName'])
+                    print(
+                        "App Configuration not found, creating: "
+                        + repo_data["displayName"]
+                    )
                     app_ids = {}
                     # If backup contains targeted apps, search for the app
-                    if repo_data['targetedMobileApps']:
+                    if repo_data["targetedMobileApps"]:
                         q_param = {
-                            "$filter": "(isof(" + "'" + str(
-                                repo_data['targetedMobileApps']['type']).replace(
-                                '#',
-                                '') + "'" + '))',
-                            "$search": repo_data['targetedMobileApps']['appName']}
-                        app_request = makeapirequest(
-                            APP_ENDPOINT, token, q_param)
-                        if app_request['value']:
-                            app_ids = app_request['value'][0]['id']
+                            "$filter": "(isof("
+                            + "'"
+                            + str(repo_data["targetedMobileApps"]["type"]).replace(
+                                "#", ""
+                            )
+                            + "'"
+                            + "))",
+                            "$search": repo_data["targetedMobileApps"]["appName"],
+                        }
+                        app_request = makeapirequest(APP_ENDPOINT, token, q_param)
+                        if app_request["value"]:
+                            app_ids = app_request["value"][0]["id"]
                     # If the app could be found and matches type and name in
                     # backup, continue to create
-                    if app_ids:
-                        repo_data.pop('targetedMobileApps')
-                        repo_data['targetedMobileApps'] = [app_ids]
+                    if app_ids and report is False:
+                        repo_data.pop("targetedMobileApps")
+                        repo_data["targetedMobileApps"] = [app_ids]
                         request_json = json.dumps(repo_data)
                         post_request = makeapirequestPost(
-                            ENDPOINT, token, q_param=None, jdata=request_json, status_code=201)
+                            ENDPOINT,
+                            token,
+                            q_param=None,
+                            jdata=request_json,
+                            status_code=201,
+                        )
                         mem_assign_obj = []
                         assignment = update_assignment(
-                            assign_obj, mem_assign_obj, token)
+                            assign_obj, mem_assign_obj, token
+                        )
                         if assignment is not None:
-                            request_data = {}
-                            request_data['assignments'] = assignment
+                            request_data = {"assignments": assignment}
                             post_assignment_update(
                                 request_data,
-                                post_request['id'],
-                                'deviceAppManagement/mobileAppConfigurations/',
-                                '/microsoft.graph.managedDeviceMobileAppConfiguration/assign',
-                                token)
-                        print("App Configuration created with id: " +
-                              post_request['id'])
+                                post_request["id"],
+                                "deviceAppManagement/mobileAppConfigurations/",
+                                "/microsoft.graph.managedDeviceMobileAppConfiguration/assign",
+                                token,
+                            )
+                        print(
+                            "App Configuration created with id: " + post_request["id"]
+                        )
                     else:
                         print(
-                            "App configured in App Configuration profile could not be found, skipping creation")
+                            "App configured in App Configuration profile could not be found, skipping creation"
+                        )
 
-    return diff_count
+    return diff_summary
diff --git a/src/IntuneCD/update_appProtection.py b/src/IntuneCD/update_appProtection.py
index a5b1c241..717905d3 100644
--- a/src/IntuneCD/update_appProtection.py
+++ b/src/IntuneCD/update_appProtection.py
@@ -12,7 +12,7 @@
 from .graph_batch import batch_assignment, get_object_assignment
 from .update_assignment import update_assignment, post_assignment_update
 from .remove_keys import remove_keys
-from .get_diff_output import get_diff_output
+from .diff_summary import DiffSummary
 from .check_file import check_file
 from .load_file import load_file
 
@@ -20,7 +20,7 @@
 ENDPOINT = "https://graph.microsoft.com/beta/deviceAppManagement/"
 
 
-def update(path, token, assignment=False):
+def update(path, token, assignment=False, report=False):
     """
     This function updates all App Protection Polices in Intune,
     if the configuration in Intune differs from the JSON/YAML file.
@@ -30,21 +30,18 @@ def update(path, token, assignment=False):
     :param assignment: Boolean to determine if assignments should be updated
     """
 
-    diff_count = 0
     # Set App Protection path
     configpath = path + "/" + "App Protection/"
+    diff_summary = []
     # If App Configuration path exists, continue
     if os.path.exists(configpath):
 
         # Get App Protections
-        mem_data = makeapirequest(f'{ENDPOINT}managedAppPolicies', token)
+        mem_data = makeapirequest(f"{ENDPOINT}managedAppPolicies", token)
         # Get current assignments
         mem_assignments = batch_assignment(
-            mem_data,
-            'deviceAppManagement/',
-            '/assignments',
-            token,
-            app_protection=True)
+            mem_data, "deviceAppManagement/", "/assignments", token, app_protection=True
+        )
 
         for filename in os.listdir(configpath):
             file = check_file(configpath, filename)
@@ -56,9 +53,15 @@ def update(path, token, assignment=False):
                 repo_data = load_file(filename, f)
 
                 if repo_data:
-                    if repo_data['@odata.type'] == "#microsoft.graph.mdmWindowsInformationProtectionPolicy":
+                    if (
+                        repo_data["@odata.type"]
+                        == "#microsoft.graph.mdmWindowsInformationProtectionPolicy"
+                    ):
                         platform = "mdmWindowsInformationProtectionPolicies"
-                    elif repo_data['@odata.type'] == "#microsoft.graph.windowsInformationProtectionPolicy":
+                    elif (
+                        repo_data["@odata.type"]
+                        == "#microsoft.graph.windowsInformationProtectionPolicy"
+                    ):
                         platform = "windowsInformationProtectionPolicies"
                     else:
                         platform = f"{str(repo_data['@odata.type']).split('.')[2]}s"
@@ -66,98 +69,102 @@ def update(path, token, assignment=False):
                 # Create object to pass in to assignment function
                 assign_obj = {}
                 if "assignments" in repo_data:
-                    assign_obj = repo_data['assignments']
-                repo_data.pop('assignments', None)
+                    assign_obj = repo_data["assignments"]
+                repo_data.pop("assignments", None)
 
                 # If App Protection exists, continue
-                data = {'value': ''}
-                if mem_data['value']:
-                    for val in mem_data['value']:
-                        if 'targetedAppManagementLevels' in val and 'targetedAppManagementLevels' in repo_data:
-                            if repo_data['targetedAppManagementLevels'] == val['targetedAppManagementLevels'] and \
-                                    repo_data['displayName'] == val['displayName']:
-                                data['value'] = val
-                        elif repo_data['@odata.type'] == val['@odata.type'] and \
-                                repo_data['displayName'] == val['displayName']:
-                            data['value'] = val
-
-                if data['value']:
+                data = {"value": ""}
+                if mem_data["value"]:
+                    for val in mem_data["value"]:
+                        if (
+                            "targetedAppManagementLevels" in val
+                            and "targetedAppManagementLevels" in repo_data
+                        ):
+                            if (
+                                repo_data["targetedAppManagementLevels"]
+                                == val["targetedAppManagementLevels"]
+                                and repo_data["displayName"] == val["displayName"]
+                            ):
+                                data["value"] = val
+                        elif (
+                            repo_data["@odata.type"] == val["@odata.type"]
+                            and repo_data["displayName"] == val["displayName"]
+                        ):
+                            data["value"] = val
+
+                if data["value"]:
                     print("-" * 90)
-                    mem_id = data['value']['id']
+                    mem_id = data["value"]["id"]
                     # Remove keys before using DeepDiff
-                    data['value'] = remove_keys(data['value'])
+                    data["value"] = remove_keys(data["value"])
 
-                    diff = DeepDiff(
-                        data['value'],
-                        repo_data,
-                        ignore_order=True).get(
-                        'values_changed',
-                        {})
+                    diff = DeepDiff(data["value"], repo_data, ignore_order=True).get(
+                        "values_changed", {}
+                    )
 
                     # If any changed values are found, push them to Intune
-                    if diff:
-                        diff_count += 1
-                        print(
-                            "Updating App protection: " +
-                            repo_data['displayName'] +
-                            ", values changed:")
-                        values = get_diff_output(diff)
-                        for value in values:
-                            print(value)
+                    if diff and report is False:
                         request_data = json.dumps(repo_data)
                         q_param = None
                         makeapirequestPatch(
-                            f'{ENDPOINT}{platform}/{mem_id}',
+                            f"{ENDPOINT}{platform}/{mem_id}",
                             token,
                             q_param,
                             request_data,
-                            status_code=204)
-                    else:
-                        print(
-                            'No difference found for App protection: ' +
-                            repo_data['displayName'])
+                            status_code=204,
+                        )
+
+                    diff_config = DiffSummary(
+                        data=diff,
+                        name=repo_data["displayName"],
+                        type="App Protection",
+                    )
+                    diff_summary.append(diff_config)
 
                     if assignment:
-                        mem_assign_obj = get_object_assignment(
-                            mem_id, mem_assignments)
-                        update = update_assignment(
-                            assign_obj, mem_assign_obj, token)
+                        mem_assign_obj = get_object_assignment(mem_id, mem_assignments)
+                        update = update_assignment(assign_obj, mem_assign_obj, token)
                         if update is not None:
-                            request_data = {'assignments': update}
+                            request_data = {"assignments": update}
                             post_assignment_update(
                                 request_data,
                                 mem_id,
-                                f'deviceAppManagement/{platform}',
-                                'assign',
+                                f"deviceAppManagement/{platform}",
+                                "assign",
                                 token,
-                                status_code=204)
+                                status_code=204,
+                            )
 
                 # If App Protection does not exist, create it and assign
                 else:
                     print("-" * 90)
-                    print("App Protection not found, creating policy: " +
-                          repo_data['displayName'])
-                    request_json = json.dumps(repo_data)
-                    post_request = makeapirequestPost(
-                        f'{ENDPOINT}managedAppPolicies',
-                        token,
-                        q_param=None,
-                        jdata=request_json,
-                        status_code=201)
-                    mem_assign_obj = []
-                    assignment = update_assignment(
-                        assign_obj, mem_assign_obj, token)
-                    if assignment is not None:
-                        request_data = {'assignments': assignment}
-                        post_assignment_update(
-                            request_data,
-                            post_request['id'],
-                            f'deviceAppManagement/{platform}',
-                            'assign',
-                            token,
-                            status_code=204)
                     print(
-                        "App Protection created with id: " +
-                        post_request['id'])
+                        "App Protection not found, creating policy: "
+                        + repo_data["displayName"]
+                    )
+                    if report is False:
+                        request_json = json.dumps(repo_data)
+                        post_request = makeapirequestPost(
+                            f"{ENDPOINT}managedAppPolicies",
+                            token,
+                            q_param=None,
+                            jdata=request_json,
+                            status_code=201,
+                        )
+                        mem_assign_obj = []
+                        assignment = update_assignment(
+                            assign_obj, mem_assign_obj, token
+                        )
+                        if assignment is not None:
+                            request_data = {"assignments": assignment}
+                            post_assignment_update(
+                                request_data,
+                                post_request["id"],
+                                f"deviceAppManagement/{platform}",
+                                "assign",
+                                token,
+                                status_code=204,
+                            )
+                        print("App Protection created with id: " + post_request["id"])
 
-    return diff_count
+    return diff_summary
diff --git a/src/IntuneCD/update_appleEnrollmentProfile.py b/src/IntuneCD/update_appleEnrollmentProfile.py
index 4bea31c8..ceb96bde 100644
--- a/src/IntuneCD/update_appleEnrollmentProfile.py
+++ b/src/IntuneCD/update_appleEnrollmentProfile.py
@@ -12,13 +12,13 @@
 from .remove_keys import remove_keys
 from .check_file import check_file
 from .load_file import load_file
-from .get_diff_output import get_diff_output
+from .diff_summary import DiffSummary
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/depOnboardingSettings/"
 
 
-def update(path, token):
+def update(path, token, report):
     """
     This function updates all Apple Enrollment Profiles in Intune,
     if the configuration in Intune differs from the JSON/YAML file.
@@ -27,7 +27,7 @@ def update(path, token):
     :param token: Token to use for authenticating the request
     """
 
-    diff_count = 0
+    diff_summary = []
     # Set Apple Enrollment Profile path
     configpath = path + "/" + "Enrollment Profiles/Apple/"
     # If Apple Enrollment Profile path exists, continue
@@ -35,8 +35,8 @@ def update(path, token):
         # Get IDs of all Apple Enrollment Profiles and add them to a list
         ids = []
         mem_data_accounts = makeapirequest(ENDPOINT, token)
-        for id in mem_data_accounts['value']:
-            ids.append(id['id'])
+        for id in mem_data_accounts["value"]:
+            ids.append(id["id"])
 
         for profile in ids:
             for filename in os.listdir(configpath):
@@ -47,51 +47,47 @@ def update(path, token):
                 # data and set query parameter
                 with open(file) as f:
                     repo_data = load_file(filename, f)
-                    q_param = {"$filter": "displayName eq " +
-                               "'" + repo_data['displayName'] + "'"}
+                    q_param = {
+                        "$filter": "displayName eq "
+                        + "'"
+                        + repo_data["displayName"]
+                        + "'"
+                    }
 
                     # Get Apple Enrollment Profile with query parameter
                     profile_data = makeapirequest(
-                        ENDPOINT + profile + '/enrollmentProfiles', token, q_param)
+                        ENDPOINT + profile + "/enrollmentProfiles", token, q_param
+                    )
 
                     # If Apple Enrollment Profile exists, continue
-                    if profile_data['value']:
+                    if profile_data["value"]:
                         print("-" * 90)
-                        pid = profile_data['value'][0]['id']
+                        pid = profile_data["value"][0]["id"]
                         # Remove keys before using DeepDiff
-                        profile_data['value'][0] = remove_keys(profile_data['value'][0])
+                        profile_data["value"][0] = remove_keys(profile_data["value"][0])
 
                         diff = DeepDiff(
-                            profile_data['value'][0],
-                            repo_data,
-                            ignore_order=True).get(
-                            'values_changed',
-                            {})
+                            profile_data["value"][0], repo_data, ignore_order=True
+                        ).get("values_changed", {})
 
                         # If any changed values are found, push them to Intune
-                        if diff:
-                            diff_count += 1
-                            print(
-                                "Updating Apple Enrollment profile: " +
-                                repo_data['displayName'] +
-                                ", values changed:")
-                            values = get_diff_output(diff)
-                            for val in values:
-                                print(val)
+                        if diff and report is False:
                             request_data = json.dumps(repo_data)
                             q_param = None
                             makeapirequestPatch(
-                                ENDPOINT +
-                                profile +
-                                "/enrollmentProfiles/" +
-                                pid,
+                                ENDPOINT + profile + "/enrollmentProfiles/" + pid,
                                 token,
                                 q_param,
                                 request_data,
-                                status_code=204)
-                        else:
-                            print(
-                                'No difference found for Apple Enrollment profile: ' +
-                                repo_data['displayName'])
+                                status_code=204,
+                            )
 
-    return diff_count
+                        diff_profile = DiffSummary(
+                            data=diff,
+                            name=repo_data["displayName"],
+                            type="Apple Enrollment Profile",
+                        )
+
+                        diff_summary.append(diff_profile)
+
+    return diff_summary
diff --git a/src/IntuneCD/update_assignment.py b/src/IntuneCD/update_assignment.py
index 04955f10..01262bf5 100644
--- a/src/IntuneCD/update_assignment.py
+++ b/src/IntuneCD/update_assignment.py
@@ -19,31 +19,30 @@ def get_added_removed(diff_object) -> list:
 
     update = []
     for root in diff_object:
-        intent = ''
-        filterID = ''
-        filterType = ''
-        target = ''
+        intent = ""
+        filterID = ""
+        filterType = ""
+        target = ""
 
-        if 'intent' in diff_object[root]:
-            intent = diff_object[root]['intent']
+        if "intent" in diff_object[root]:
+            intent = diff_object[root]["intent"]
 
-        if 'target' in diff_object[root]:
-            if 'deviceAndAppManagementAssignmentFilterId' in diff_object[root]['target']:
-                filterID = diff_object[root]['target']['deviceAndAppManagementAssignmentFilterId']
-            if 'deviceAndAppManagementAssignmentFilterType' in diff_object[root]['target']:
-                filterType = diff_object[root]['target']['deviceAndAppManagementAssignmentFilterType']
+        if "target" in diff_object[root]:
+            if "deviceAndAppManagementAssignmentFilterId" in diff_object[root]["target"]:
+                filterID = diff_object[root]["target"]["deviceAndAppManagementAssignmentFilterId"]
+            if "deviceAndAppManagementAssignmentFilterType" in diff_object[root]["target"]:
+                filterType = diff_object[root]["target"]["deviceAndAppManagementAssignmentFilterType"]
 
-            if diff_object[root]['target']['@odata.type'] == '#microsoft.graph.groupAssignmentTarget':
-                target = diff_object[root]['target']['groupId']
+            if diff_object[root]["target"]["@odata.type"] == "#microsoft.graph.groupAssignmentTarget":
+                target = diff_object[root]["target"]["groupId"]
 
-            if diff_object[root]['target']['@odata.type'] == '#microsoft.graph.allDevicesAssignmentTarget':
-                target = 'All Devices'
+            if diff_object[root]["target"]["@odata.type"] == "#microsoft.graph.allDevicesAssignmentTarget":
+                target = "All Devices"
 
-            if diff_object[root]['target']['@odata.type'] == '#microsoft.graph.allLicensedUsersAssignmentTarget':
-                target = 'All Users'
+            if diff_object[root]["target"]["@odata.type"] == "#microsoft.graph.allLicensedUsersAssignmentTarget":
+                target = "All Users"
 
-        update.append(
-            f"intent: {intent}, Filter ID: {filterID}, Filter Type: {filterType}, target: {target}")
+        update.append(f"intent: {intent}, Filter ID: {filterID}, Filter Type: {filterType}, target: {target}")
 
     return update
 
@@ -59,44 +58,45 @@ def update_assignment(repo, mem, token) -> list:
     """
 
     diff = DeepDiff(mem, repo, ignore_order=True)
-    added = diff.get('iterable_item_added', {})
+    added = diff.get("iterable_item_added", {})
     update = False
     if diff:
         for val in repo:
             # Request group id based on group name
-            if 'groupName' in val['target']:
+            if "groupName" in val["target"]:
                 request = makeapirequest(
-                    "https://graph.microsoft.com/beta/groups", token, {
-                        "$filter": "displayName eq " + "'" + val['target']['groupName'] + "'"})
-                if request['value']:
-                    val['target'].pop('groupName')
-                    val['target']['groupId'] = request['value'][0]['id']
+                    "https://graph.microsoft.com/beta/groups",
+                    token,
+                    {"$filter": "displayName eq " + "'" + val["target"]["groupName"] + "'"},
+                )
+                if request["value"]:
+                    val["target"].pop("groupName")
+                    val["target"]["groupId"] = request["value"][0]["id"]
 
             # Request filter id based on filter name
-            if val['target']['deviceAndAppManagementAssignmentFilterId']:
-                filters = makeapirequest(
-                    "https://graph.microsoft.com/beta/deviceManagement/assignmentFilters", token)
-                for filter in filters['value']:
-                    if val['target']['deviceAndAppManagementAssignmentFilterId'] == filter['displayName']:
-                        val['target']['deviceAndAppManagementAssignmentFilterId'] = filter['id']
+            if val["target"]["deviceAndAppManagementAssignmentFilterId"]:
+                filters = makeapirequest("https://graph.microsoft.com/beta/deviceManagement/assignmentFilters", token)
+                for filter in filters["value"]:
+                    if val["target"]["deviceAndAppManagementAssignmentFilterId"] == filter["displayName"]:
+                        val["target"]["deviceAndAppManagementAssignmentFilterId"] = filter["id"]
 
                 # If filter is None, remove keys
-                if val['target']['deviceAndAppManagementAssignmentFilterId'] is None:
-                    val['target'].pop(
-                        'deviceAndAppManagementAssignmentFilterId')
-                    val['target'].pop(
-                        'deviceAndAppManagementAssignmentFilterType')
+                if val["target"]["deviceAndAppManagementAssignmentFilterId"] is None:
+                    val["target"].pop("deviceAndAppManagementAssignmentFilterId")
+                    val["target"].pop("deviceAndAppManagementAssignmentFilterType")
 
         for val in repo:
-            if 'groupId' in val['target'] or '#microsoft.graph.allDevicesAssignmentTarget' in val['target'][
-                '@odata.type'] \
-                    or '#microsoft.graph.allLicensedUsersAssignmentTarget' in val['target']['@odata.type']:
+            if (
+                "groupId" in val["target"]
+                or "#microsoft.graph.allDevicesAssignmentTarget" in val["target"]["@odata.type"]
+                or "#microsoft.graph.allLicensedUsersAssignmentTarget" in val["target"]["@odata.type"]
+            ):
                 update = True
 
         if update is True:
             # Print added assignments
             if added:
-                print('Updating assignments, added assignments:')
+                print("Updating assignments, added assignments:")
                 updates = get_added_removed(added)
                 for update in updates:
                     print(update)
@@ -119,10 +119,5 @@ def post_assignment_update(object, id, url, extra_url, token, status_code=200):
     """
 
     request_json = json.dumps(object)
-    url = f'https://graph.microsoft.com/beta/{url}/{id}/{extra_url}'
-    makeapirequestPost(
-        url,
-        token,
-        q_param=None,
-        jdata=request_json,
-        status_code=status_code)
+    url = f"https://graph.microsoft.com/beta/{url}/{id}/{extra_url}"
+    makeapirequestPost(url, token, q_param=None, jdata=request_json, status_code=status_code)
diff --git a/src/IntuneCD/update_assignmentFilter.py b/src/IntuneCD/update_assignmentFilter.py
index 968b5fe6..f3280d67 100644
--- a/src/IntuneCD/update_assignmentFilter.py
+++ b/src/IntuneCD/update_assignmentFilter.py
@@ -12,14 +12,14 @@
 from .remove_keys import remove_keys
 from .load_file import load_file
 from .check_file import check_file
-from .get_diff_output import get_diff_output
+from .diff_summary import DiffSummary
 
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/assignmentFilters"
 
 
-def update(path, token):
+def update(path, token, report):
     """
     This function updates all Filters in Intune if the configuration in Intune differs from the JSON/YAML file.
 
@@ -27,7 +27,7 @@ def update(path, token):
     :param token: Token to use for authenticating the request
     """
 
-    diff_count = 0
+    diff_summary = []
     # Set Filters path
     configpath = path + "/" + "Filters"
     # If App Configuration path exists, continue
@@ -47,53 +47,60 @@ def update(path, token):
                 filter_value = {}
 
                 # If Filter exists, continue
-                if mem_data['value']:
-                    for val in mem_data['value']:
-                        if repo_data['displayName'] == val['displayName']:
+                if mem_data["value"]:
+                    for val in mem_data["value"]:
+                        if repo_data["displayName"] == val["displayName"]:
                             filter_value = val
 
                 if filter_value:
                     print("-" * 90)
-                    filter_id = filter_value['id']
+                    filter_id = filter_value["id"]
                     filter_value = remove_keys(filter_value)
 
                     filter_value.pop("payloads", None)
                     repo_data.pop("payloads", None)
 
-                    diff = DeepDiff(
-                        filter_value, repo_data, ignore_order=True).get(
-                        'values_changed', {})
+                    diff = DeepDiff(filter_value, repo_data, ignore_order=True).get(
+                        "values_changed", {}
+                    )
 
                     # If any changed values are found, push them to Intune
-                    if diff:
-                        diff_count += 1
-                        print("Updating Filter: " +
-                              repo_data['displayName'] + ", values changed:")
-                        values = get_diff_output(diff)
-                        for value in values:
-                            print(value)
+                    if diff and report is False:
                         repo_data.pop("platform", None)
                         request_data = json.dumps(repo_data)
                         makeapirequestPatch(
                             ENDPOINT + "/" + filter_id,
                             token,
                             q_param=None,
-                            jdata=request_data)
-                    else:
-                        print('No difference found for Filter: ' +
-                              repo_data['displayName'])
+                            jdata=request_data,
+                        )
+
+                    diff_config = DiffSummary(
+                        data=diff,
+                        name=repo_data["displayName"],
+                        type="Filter",
+                    )
+
+                    diff_summary.append(diff_config)
 
                 # If Filter does not exist, create it
                 else:
                     print("-" * 90)
                     print(
-                        "Assignment filter not found, creating filter: " +
-                        repo_data['displayName'])
-                    request_json = json.dumps(repo_data)
-                    post_request = makeapirequestPost(
-                        ENDPOINT, token, q_param=None, jdata=request_json, status_code=201)
-                    print(
-                        "Assignment filter created with id: " +
-                        post_request['id'])
-
-    return diff_count
+                        "Assignment filter not found, creating filter: "
+                        + repo_data["displayName"]
+                    )
+                    if report is False:
+                        request_json = json.dumps(repo_data)
+                        post_request = makeapirequestPost(
+                            ENDPOINT,
+                            token,
+                            q_param=None,
+                            jdata=request_json,
+                            status_code=201,
+                        )
+                        print(
+                            "Assignment filter created with id: " + post_request["id"]
+                        )
+
+    return diff_summary
diff --git a/src/IntuneCD/update_compliance.py b/src/IntuneCD/update_compliance.py
index 5e23bf98..7422336b 100644
--- a/src/IntuneCD/update_compliance.py
+++ b/src/IntuneCD/update_compliance.py
@@ -14,14 +14,14 @@
 from .remove_keys import remove_keys
 from .load_file import load_file
 from .check_file import check_file
-from .get_diff_output import get_diff_output
+from .diff_summary import DiffSummary
 
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/deviceCompliancePolicies"
 
 
-def update(path, token, assignment=False):
+def update(path, token, assignment=False, report=False):
     """
     This function updates all Compliance Polices in Intune,
     if the configuration in Intune differs from the JSON/YAML file.
@@ -31,21 +31,23 @@ def update(path, token, assignment=False):
     :param assignment: Boolean to determine if assignments should be updated
     """
 
-    diff_count = 0
     # Set Compliance Policy path
     configpath = path + "/" + "Compliance Policies/Policies/"
+    diff_summary = []
     # If App Configuration path exists, continue
     if os.path.exists(configpath):
         # Get compliance policies
         q_param = {
-            "expand": "scheduledActionsForRule($expand=scheduledActionConfigurations)"}
+            "expand": "scheduledActionsForRule($expand=scheduledActionConfigurations)"
+        }
         mem_data = makeapirequest(ENDPOINT, token, q_param)
         # Get current assignments
         mem_assignments = batch_assignment(
             mem_data,
-            'deviceManagement/deviceCompliancePolicies/',
-            '/assignments',
-            token)
+            "deviceManagement/deviceCompliancePolicies/",
+            "/assignments",
+            token,
+        )
 
         for filename in os.listdir(configpath):
             file = check_file(configpath, filename)
@@ -59,48 +61,43 @@ def update(path, token, assignment=False):
                 # Create object to pass in to assignment function
                 assign_obj = {}
                 if "assignments" in repo_data:
-                    assign_obj = repo_data['assignments']
-                repo_data.pop('assignments', None)
+                    assign_obj = repo_data["assignments"]
+                repo_data.pop("assignments", None)
 
                 # If Compliance Policy exists, continue
-                data = {'value': ''}
-                if mem_data['value']:
-                    for val in mem_data['value']:
-                        if repo_data['@odata.type'] == val['@odata.type'] and \
-                                repo_data['displayName'] == val['displayName']:
-                            data['value'] = val
-
-                if data['value']:
+                data = {"value": ""}
+                if mem_data["value"]:
+                    for val in mem_data["value"]:
+                        if (
+                            repo_data["@odata.type"] == val["@odata.type"]
+                            and repo_data["displayName"] == val["displayName"]
+                        ):
+                            data["value"] = val
+
+                if data["value"]:
                     print("-" * 90)
-                    mem_id = data['value']['id']
-                    data['value'] = remove_keys(data['value'])
+                    mem_id = data["value"]["id"]
+                    data["value"] = remove_keys(data["value"])
 
-                    if data['value']['scheduledActionsForRule']:
-                        for rule in data['value']['scheduledActionsForRule']:
+                    if data["value"]["scheduledActionsForRule"]:
+                        for rule in data["value"]["scheduledActionsForRule"]:
                             remove_keys(rule)
-                        for scheduled_config in data['value']['scheduledActionsForRule'][0][
-                                'scheduledActionConfigurations']:
+                        for scheduled_config in data["value"][
+                            "scheduledActionsForRule"
+                        ][0]["scheduledActionConfigurations"]:
                             remove_keys(scheduled_config)
 
                     diff = DeepDiff(
-                        data['value'],
+                        data["value"],
                         repo_data,
                         ignore_order=True,
-                        exclude_paths="root['scheduledActionsForRule'][0]['scheduledActionConfigurations']").get(
-                        'values_changed',
-                        {})
+                        exclude_paths="root['scheduledActionsForRule'][0]['scheduledActionConfigurations']",
+                    ).get("values_changed", {})
 
                     # If any changed values are found, push them to Intune
-                    if diff:
-                        diff_count += 1
-                        print("Updating Compliance policy: " +
-                              repo_data['displayName'] + ", values changed:")
-                        values = get_diff_output(diff)
-                        for value in values:
-                            print(value)
-
-                        scheduled_actions = repo_data['scheduledActionsForRule']
-                        repo_data.pop('scheduledActionsForRule', None)
+                    if diff and report is False:
+                        scheduled_actions = repo_data["scheduledActionsForRule"]
+                        repo_data.pop("scheduledActionsForRule", None)
                         request_data = json.dumps(repo_data)
                         q_param = None
                         makeapirequestPatch(
@@ -108,91 +105,101 @@ def update(path, token, assignment=False):
                             token,
                             q_param,
                             request_data,
-                            status_code=204)
-                        repo_data['scheduledActionsForRule'] = scheduled_actions
+                            status_code=204,
+                        )
+                        repo_data["scheduledActionsForRule"] = scheduled_actions
 
-                    else:
-                        print(
-                            'No difference found for Compliance policy: ' +
-                            repo_data['displayName'])
+                    diff_policy = DiffSummary(
+                        data=diff,
+                        name=repo_data["displayName"],
+                        type="Compliance Policy",
+                    )
+
+                    diff_summary.append(diff_policy)
 
-                    if repo_data['scheduledActionsForRule']:
+                    if repo_data["scheduledActionsForRule"]:
                         for mem_rule, repo_rule in zip(
-                                data['value']['scheduledActionsForRule'], repo_data['scheduledActionsForRule']):
+                            data["value"]["scheduledActionsForRule"],
+                            repo_data["scheduledActionsForRule"],
+                        ):
                             rdiff = DeepDiff(
-                                mem_rule, repo_rule, ignore_order=True).get(
-                                'values_changed', {})
-                        if rdiff:
-                            diff_count += 1
-                            print(
-                                "Updating rules for Compliance Policy: " +
-                                repo_data['displayName'] +
-                                ", values changed:")
-                            values = get_diff_output(rdiff)
-                            for value in values:
-                                print(value)
+                                mem_rule, repo_rule, ignore_order=True
+                            ).get("values_changed", {})
+
+                        if rdiff and report is False:
                             request_data = {
                                 "deviceComplianceScheduledActionForRules": [
                                     {
                                         "ruleName": "PasswordRequired",
-                                        "scheduledActionConfigurations":
-                                            repo_data['scheduledActionsForRule'][0]['scheduledActionConfigurations']
+                                        "scheduledActionConfigurations": repo_data[
+                                            "scheduledActionsForRule"
+                                        ][0]["scheduledActionConfigurations"],
                                     }
                                 ]
                             }
+
                             request_json = json.dumps(request_data)
                             q_param = None
                             makeapirequestPost(
-                                ENDPOINT +
-                                "/" +
-                                mem_id +
-                                "/scheduleActionsForRules",
+                                ENDPOINT + "/" + mem_id + "/scheduleActionsForRules",
                                 token,
                                 q_param,
-                                request_json)
-                        else:
-                            print(
-                                'No difference in rules found for Compliance policy: ' +
-                                repo_data['displayName'])
+                                request_json,
+                            )
+
+                        rdiff_summary = DiffSummary(
+                            data=rdiff,
+                            name="",
+                            type="Compliance Policy Rules",
+                        )
+
+                        diff_policy.diffs += rdiff_summary.diffs
+                        diff_policy.count += rdiff_summary.count
 
                     if assignment:
-                        mem_assign_obj = get_object_assignment(
-                            mem_id, mem_assignments)
-                        update = update_assignment(
-                            assign_obj, mem_assign_obj, token)
+                        mem_assign_obj = get_object_assignment(mem_id, mem_assignments)
+                        update = update_assignment(assign_obj, mem_assign_obj, token)
                         if update is not None:
-                            request_data = {}
-                            request_data['assignments'] = update
+                            request_data = {"assignments": update}
                             post_assignment_update(
                                 request_data,
                                 mem_id,
-                                'deviceManagement/deviceCompliancePolicies',
-                                'assign',
-                                token)
+                                "deviceManagement/deviceCompliancePolicies",
+                                "assign",
+                                token,
+                            )
 
                 # If Compliance Policy does not exist, create it and assign
                 else:
                     print("-" * 90)
                     print(
-                        "Compliance Policy not found, creating Policy: " +
-                        repo_data['displayName'])
-                    request_json = json.dumps(repo_data)
-                    post_request = makeapirequestPost(
-                        ENDPOINT, token, q_param=None, jdata=request_json, status_code=201)
-                    mem_assign_obj = []
-                    assignment = update_assignment(
-                        assign_obj, mem_assign_obj, token)
-                    if assignment is not None:
-                        request_data = {}
-                        request_data['assignments'] = assignment
-                        post_assignment_update(
-                            request_data,
-                            post_request['id'],
-                            'deviceManagement/deviceCompliancePolicies',
-                            'assign',
-                            token)
-                    print(
-                        "Compliance Policy created with id: " +
-                        post_request['id'])
+                        "Compliance Policy not found, creating Policy: "
+                        + repo_data["displayName"]
+                    )
+                    if report is False:
+                        request_json = json.dumps(repo_data)
+                        post_request = makeapirequestPost(
+                            ENDPOINT,
+                            token,
+                            q_param=None,
+                            jdata=request_json,
+                            status_code=201,
+                        )
+                        mem_assign_obj = []
+                        assignment = update_assignment(
+                            assign_obj, mem_assign_obj, token
+                        )
+                        if assignment is not None:
+                            request_data = {"assignments": assignment}
+                            post_assignment_update(
+                                request_data,
+                                post_request["id"],
+                                "deviceManagement/deviceCompliancePolicies",
+                                "assign",
+                                token,
+                            )
+                        print(
+                            "Compliance Policy created with id: " + post_request["id"]
+                        )
 
-    return diff_count
+    return diff_summary
diff --git a/src/IntuneCD/update_conditionalAccess.py b/src/IntuneCD/update_conditionalAccess.py
index 61717d7f..086c14e8 100644
--- a/src/IntuneCD/update_conditionalAccess.py
+++ b/src/IntuneCD/update_conditionalAccess.py
@@ -16,14 +16,14 @@
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/identity/conditionalAccess/policies"
 
-def update(path, token):
+
+def update(path, token, report):
     """
     This function updates all Conditional Access Profiles in Intune,
     if the configuration in Intune differs from the JSON/YAML file.
 
     :param path: Path to where the backup is saved
     :param token: Token to use for authenticating the request
-    :param assignment: Boolean to determine if assignments should be updated
     """
 
     diff_count = 0
@@ -42,59 +42,75 @@ def update(path, token):
             # and set query parameter
             with open(file) as f:
                 repo_data = load_file(filename, f)
-                repo_data['conditions'].pop('users', None)
+                repo_data["conditions"].pop("users", None)
 
-                data = {'value': ''}
-                if mem_data['value']:
-                    for val in mem_data['value']:
-                        if repo_data['displayName'] == val['displayName']:
-                            data['value'] = val
+                data = {"value": ""}
+                if mem_data["value"]:
+                    for val in mem_data["value"]:
+                        if repo_data["displayName"] == val["displayName"]:
+                            data["value"] = val
 
                 # If Conditional Access policy exists, continue
-                if data['value']:
-                    if 'id' not in data['value']:
+                if data["value"]:
+                    if "id" not in data["value"]:
                         continue
                     print("-" * 90)
 
-                    data['value']['conditions'].pop('users', None)
-                    if data['value']['grantControls']:
-                        data['value']['grantControls'].pop('authenticationStrength@odata.context', None)
+                    data["value"]["conditions"].pop("users", None)
+                    if data["value"]["grantControls"]:
+                        data["value"]["grantControls"].pop(
+                            "authenticationStrength@odata.context", None
+                        )
 
-                    mem_id = data['value']['id']
+                    mem_id = data["value"]["id"]
                     # Remove keys before using DeepDiff
-                    data['value'] = remove_keys(data['value'])
+                    data["value"] = remove_keys(data["value"])
 
-                    diff = DeepDiff(
-                        data['value'],
-                        repo_data,
-                        ignore_order=True)
+                    diff = DeepDiff(data["value"], repo_data, ignore_order=True)
 
                     # If any changed values are found, push them to Intune
                     if diff:
                         diff_count += 1
-                        print("Updating Conditional Access policy: " +
-                              repo_data['displayName'])
-
-                        request_data = json.dumps(repo_data)
-                        q_param = None
-                        makeapirequestPatch(
-                            f"{ENDPOINT}/{mem_id}", token, q_param, request_data, status_code=204)
+                        print(
+                            "Updating Conditional Access policy: "
+                            + repo_data["displayName"]
+                        )
+
+                        if report is False:
+                            request_data = json.dumps(repo_data)
+                            q_param = None
+                            makeapirequestPatch(
+                                f"{ENDPOINT}/{mem_id}",
+                                token,
+                                q_param,
+                                request_data,
+                                status_code=204,
+                            )
                     else:
                         print(
-                            'No difference found for Conditional Access policy: ' +
-                            repo_data['displayName'])
+                            "No changes found for Conditional Access policy: "
+                            + repo_data["displayName"]
+                        )
 
                 # If Conditional Access policy does not exist, create it and assign
                 else:
                     print("-" * 90)
                     print(
-                        "Conditional Access policy not found, creating policy: " +
-                        repo_data['displayName'])
-                    request_json = json.dumps(repo_data)
-                    post_request = makeapirequestPost(
-                        ENDPOINT, token, q_param=None, jdata=request_json, status_code=201)
-                    print(
-                        "Conditional Access policy created with id: " +
-                        post_request['id'])
+                        "Conditional Access policy not found, creating policy: "
+                        + repo_data["displayName"]
+                    )
+                    if report is False:
+                        request_json = json.dumps(repo_data)
+                        post_request = makeapirequestPost(
+                            ENDPOINT,
+                            token,
+                            q_param=None,
+                            jdata=request_json,
+                            status_code=201,
+                        )
+                        print(
+                            "Conditional Access policy created with id: "
+                            + post_request["id"]
+                        )
 
     return diff_count
diff --git a/src/IntuneCD/update_configurationPolicies.py b/src/IntuneCD/update_configurationPolicies.py
index 2edcd9e3..fd50c02b 100644
--- a/src/IntuneCD/update_configurationPolicies.py
+++ b/src/IntuneCD/update_configurationPolicies.py
@@ -13,13 +13,13 @@
 from .update_assignment import update_assignment, post_assignment_update
 from .check_file import check_file
 from .load_file import load_file
-from .get_diff_output import get_diff_output
+from .diff_summary import DiffSummary
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/configurationPolicies"
 
 
-def update(path, token, assignment=False):
+def update(path, token, assignment=False, report=False):
     """
     This function updates all Settings Catalog configurations in Intune,
     if the configuration in Intune differs from the JSON/YAML file.
@@ -29,7 +29,7 @@ def update(path, token, assignment=False):
     :param assignment: Boolean to determine if assignments should be updated
     """
 
-    diff_count = 0
+    diff_summary = []
     # Set Settings Catalog path
     configpath = path + "/" + "Settings Catalog/"
 
@@ -38,10 +38,8 @@ def update(path, token, assignment=False):
         mem_data = makeapirequest(ENDPOINT, token)
         # Get current assignments
         mem_assignments = batch_assignment(
-            mem_data,
-            'deviceManagement/configurationPolicies/',
-            '/assignments',
-            token)
+            mem_data, "deviceManagement/configurationPolicies/", "/assignments", token
+        )
 
         for filename in os.listdir(configpath):
             file = check_file(configpath, filename)
@@ -56,93 +54,101 @@ def update(path, token, assignment=False):
                 # Create object to pass in to assignment function
                 assign_obj = {}
                 if "assignments" in repo_data:
-                    assign_obj = repo_data['assignments']
-                repo_data.pop('assignments', None)
+                    assign_obj = repo_data["assignments"]
+                repo_data.pop("assignments", None)
 
-                data = {'value': ''}
-                if mem_data['value']:
-                    for val in mem_data['value']:
-                        if repo_data['name'] == val['name']:
-                            data['value'] = val
+                data = {"value": ""}
+                if mem_data["value"]:
+                    for val in mem_data["value"]:
+                        if repo_data["name"] == val["name"]:
+                            data["value"] = val
 
                 # If Filter exists, continue
-                if data['value']:
+                if data["value"]:
                     print("-" * 90)
                     # Get Filter data from Intune
                     mem_policy_data = makeapirequest(
-                        ENDPOINT + "/" + data['value']['id'], token)
+                        ENDPOINT + "/" + data["value"]["id"], token
+                    )
                     # Get Filter settings from Intune
                     mem_policy_settings = makeapirequest(
-                        ENDPOINT + "/" + data['value']['id'] + "/settings", token)
+                        ENDPOINT + "/" + data["value"]["id"] + "/settings", token
+                    )
                     # Add settings to the data dictionary
-                    mem_policy_data['settings'] = mem_policy_settings['value']
+                    mem_policy_data["settings"] = mem_policy_settings["value"]
 
-                    diff = DeepDiff(
-                        mem_policy_data,
-                        repo_data,
-                        ignore_order=True).get(
-                        'values_changed',
-                        {})
+                    diff = DeepDiff(mem_policy_data, repo_data, ignore_order=True).get(
+                        "values_changed", {}
+                    )
 
                     # If any changed values are found, push them to Intune
-                    if diff:
-                        diff_count += 1
-                        print("Updating Settings Catalog policy: " +
-                              name + ", values changed:")
-                        values = get_diff_output(diff)
-                        for value in values:
-                            print(value)
+                    if diff and report is False:
                         request_data = json.dumps(repo_data)
                         q_param = None
                         makeapirequestPut(
-                            ENDPOINT +
-                            "/" +
-                            data['value']['id'],
+                            ENDPOINT + "/" + data["value"]["id"],
                             token,
                             q_param,
                             request_data,
-                            status_code=204)
-                    else:
-                        print(
-                            'No difference found for Settings Catalog policy: ' + name)
+                            status_code=204,
+                        )
+
+                    diff_policy = DiffSummary(
+                        data=diff,
+                        name=repo_data["name"],
+                        type="Settings Catalog policy",
+                    )
+
+                    diff_summary.append(diff_policy)
 
                     if assignment:
                         mem_assign_obj = get_object_assignment(
-                            data['value']['id'], mem_assignments)
-                        update = update_assignment(
-                            assign_obj, mem_assign_obj, token)
+                            data["value"]["id"], mem_assignments
+                        )
+                        update = update_assignment(assign_obj, mem_assign_obj, token)
                         if update is not None:
-                            request_data = {'assignments': update}
+                            request_data = {"assignments": update}
                             post_assignment_update(
                                 request_data,
-                                data['value']['id'],
-                                'deviceManagement/configurationPolicies',
-                                'assign',
-                                token)
+                                data["value"]["id"],
+                                "deviceManagement/configurationPolicies",
+                                "assign",
+                                token,
+                            )
 
                 # If Configuration Policy does not exist, create it and assign
                 else:
                     print("-" * 90)
                     print(
-                        "Configuration Policy not found, creating Policy: " +
-                        repo_data['name'])
-                    repo_data.pop('settingCount', None)
-                    request_json = json.dumps(repo_data)
-                    post_request = makeapirequestPost(
-                        ENDPOINT, token, q_param=None, jdata=request_json, status_code=201)
-                    mem_assign_obj = []
-                    assignment = update_assignment(
-                        assign_obj, mem_assign_obj, token)
-                    if assignment is not None:
-                        request_data = {'assignments': assignment}
-                        post_assignment_update(
-                            request_data,
-                            post_request['id'],
-                            'deviceManagement/configurationPolicies',
-                            'assign',
-                            token)
-                    print(
-                        "Configuration Policy created with id: " +
-                        post_request['id'])
+                        "Configuration Policy not found, creating Policy: "
+                        + repo_data["name"]
+                    )
+                    if report is False:
+                        repo_data.pop("settingCount", None)
+                        request_json = json.dumps(repo_data)
+                        post_request = makeapirequestPost(
+                            ENDPOINT,
+                            token,
+                            q_param=None,
+                            jdata=request_json,
+                            status_code=201,
+                        )
+                        mem_assign_obj = []
+                        assignment = update_assignment(
+                            assign_obj, mem_assign_obj, token
+                        )
+                        if assignment is not None:
+                            request_data = {"assignments": assignment}
+                            post_assignment_update(
+                                request_data,
+                                post_request["id"],
+                                "deviceManagement/configurationPolicies",
+                                "assign",
+                                token,
+                            )
+                        print(
+                            "Configuration Policy created with id: "
+                            + post_request["id"]
+                        )
 
-    return diff_count
+    return diff_summary
diff --git a/src/IntuneCD/update_enrollmentStatusPage.py b/src/IntuneCD/update_enrollmentStatusPage.py
index 55d4a15a..ff6a99e4 100644
--- a/src/IntuneCD/update_enrollmentStatusPage.py
+++ b/src/IntuneCD/update_enrollmentStatusPage.py
@@ -14,14 +14,16 @@
 from .check_file import check_file
 from .load_file import load_file
 from .remove_keys import remove_keys
-from .get_diff_output import get_diff_output
+from .diff_summary import DiffSummary
 
 # Set MS Graph endpoint
-ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/deviceEnrollmentConfigurations"
+ENDPOINT = (
+    "https://graph.microsoft.com/beta/deviceManagement/deviceEnrollmentConfigurations"
+)
 APP_ENDPOINT = "https://graph.microsoft.com/beta/deviceAppManagement/mobileApps"
 
 
-def update(path, token, assignment=False):
+def update(path, token, assignment=False, report=False):
     """
     This function updates all Windows Enrollment Status Page Profiles in Intune,
     if the configuration in Intune differs from the JSON/YAML file.
@@ -31,7 +33,7 @@ def update(path, token, assignment=False):
     :param assignment: Boolean to determine if assignments should be updated
     """
 
-    diff_count = 0
+    diff_summary = []
     # Set Windows Enrollment Status Page Profile path
     configpath = path + "/" + "Enrollment Profiles/Windows/ESP/"
     # If Windows Enrollment Profile path exists, continue
@@ -41,9 +43,10 @@ def update(path, token, assignment=False):
         # Get current assignment
         mem_assignments = batch_assignment(
             mem_data,
-            'deviceManagement/deviceEnrollmentConfigurations/',
-            '/assignments',
-            token)
+            "deviceManagement/deviceEnrollmentConfigurations/",
+            "/assignments",
+            token,
+        )
 
         for filename in os.listdir(configpath):
             file = check_file(configpath, filename)
@@ -56,111 +59,120 @@ def update(path, token, assignment=False):
                 # Create object to pass in to assignment function
                 assign_obj = {}
                 if "assignments" in repo_data:
-                    assign_obj = repo_data['assignments']
-                repo_data.pop('assignments', None)
-
-                data = {'value': ''}
-                if mem_data['value']:
-                    for val in mem_data['value']:
-                        if repo_data['displayName'] == val['displayName'] and repo_data['@odata.type'] == val['@odata.type']:
-                            data['value'] = val
+                    assign_obj = repo_data["assignments"]
+                repo_data.pop("assignments", None)
+
+                data = {"value": ""}
+                if mem_data["value"]:
+                    for val in mem_data["value"]:
+                        if (
+                            repo_data["displayName"] == val["displayName"]
+                            and repo_data["@odata.type"] == val["@odata.type"]
+                        ):
+                            data["value"] = val
 
                 # If Enrollment Status Page Profile exists, continue
-                if data['value']:
+                if data["value"]:
                     print("-" * 90)
-                    mem_id = data['value']['id']
+                    mem_id = data["value"]["id"]
                     # Remove keys before using DeepDiff
-                    mem_data['value'][0] = remove_keys(mem_data['value'][0])
+                    mem_data["value"][0] = remove_keys(mem_data["value"][0])
 
                     # Get application ID of configured apps
-                    if 'selectedMobileAppNames' in repo_data:
+                    if "selectedMobileAppNames" in repo_data:
                         app_ids = []
-                        
-                        for app in repo_data['selectedMobileAppNames']:
+
+                        for app in repo_data["selectedMobileAppNames"]:
                             q_param = {
-                            "$filter": f"(isof('{str(app['type']).replace('#','')}'))", 
-                            "$search": '"' + app['name'] + '"'}
+                                "$filter": f"(isof('{str(app['type']).replace('#','')}'))",
+                                "$search": '"' + app["name"] + '"',
+                            }
 
-                            app_request = makeapirequest(
-                                APP_ENDPOINT, token, q_param)
-                            if app_request['value']:
-                                app_ids.append(app_request['value'][0]['id'])
+                            app_request = makeapirequest(APP_ENDPOINT, token, q_param)
+                            if app_request["value"]:
+                                app_ids.append(app_request["value"][0]["id"])
 
                         if app_ids:
-                            repo_data.pop('selectedMobileAppNames', None)
-                            repo_data['selectedMobileAppIds'] = app_ids
+                            repo_data.pop("selectedMobileAppNames", None)
+                            repo_data["selectedMobileAppIds"] = app_ids
                         else:
-                            print("No app found with name: " + app['name'])
+                            print("No app found with name: " + app["name"])
 
-                    diff = DeepDiff(
-                        data['value'],
-                        repo_data,
-                        ignore_order=True).get(
-                        'values_changed',
-                        {})
+                    diff = DeepDiff(data["value"], repo_data, ignore_order=True).get(
+                        "values_changed", {}
+                    )
 
                     # If any changed values are found, push them to Intune
-                    if diff:
-                        diff_count += 1
-                        print("Updating Enrollment Status Page profile: " +
-                              repo_data['displayName'] + ", values changed:")
-                        values = get_diff_output(diff)
-                        for value in values:
-                            print(value)
-
-                        repo_data.pop('priority', None)
+                    if diff and report is False:
+                        repo_data.pop("priority", None)
 
                         request_data = json.dumps(repo_data)
                         q_param = None
                         makeapirequestPatch(
-                            f"{ENDPOINT}/{mem_id}", token, q_param, request_data)
-                    else:
-                        print(
-                            'No difference found for Enrollment Status Page profile: ' +
-                            repo_data['displayName'])
+                            f"{ENDPOINT}/{mem_id}", token, q_param, request_data
+                        )
+
+                    diff_profile = DiffSummary(
+                        data=diff,
+                        name=repo_data["displayName"],
+                        type="Enrollment Status Page Profile",
+                    )
+
+                    diff_summary.append(diff_profile)
 
                     if assignment:
-                        mem_assign_obj = get_object_assignment(
-                            mem_id, mem_assignments)
-                        update = update_assignment(
-                            assign_obj, mem_assign_obj, token)
+                        mem_assign_obj = get_object_assignment(mem_id, mem_assignments)
+                        update = update_assignment(assign_obj, mem_assign_obj, token)
                         if update is not None:
-                            request_data = {'target': update}
+                            request_data = {"target": update}
                             post_assignment_update(
                                 request_data,
                                 mem_id,
-                                'deviceManagement/deviceEnrollmentConfigurations',
-                                'assign',
+                                "deviceManagement/deviceEnrollmentConfigurations",
+                                "assign",
                                 token,
-                                status_code=201)
+                                status_code=201,
+                            )
 
                 # If Enrollmen Status Page profile does not exist, create it and assign
                 else:
                     print("-" * 90)
                     print(
-                        "Enrollment Status Page profile not found, creating profile: " +
-                        repo_data['displayName'])
-                    request_json = json.dumps(repo_data)
-                    post_request = makeapirequestPost(
-                        ENDPOINT, token, q_param=None, jdata=request_json, status_code=201)
-                    mem_assign_obj = []
-                    assignment = update_assignment(
-                        assign_obj, mem_assign_obj, token)
-                    if assignment is not None:
-                        assignments = []
-                        for assign in assignment:
-                            assignments.append({'target': assign['target']})
-                        request_data = {'enrollmentConfigurationAssignments': assignments}
-
-                        post_assignment_update(
-                            request_data,
-                            post_request['id'],
-                            'deviceManagement/deviceEnrollmentConfigurations',
-                            'assign',
+                        "Enrollment Status Page profile not found, creating profile: "
+                        + repo_data["displayName"]
+                    )
+                    if report is False:
+                        request_json = json.dumps(repo_data)
+                        post_request = makeapirequestPost(
+                            ENDPOINT,
                             token,
-                            status_code=200)
-                    print(
-                        "Enrollment Status Page profile created with id: " +
-                        post_request['id'])
+                            q_param=None,
+                            jdata=request_json,
+                            status_code=201,
+                        )
+                        mem_assign_obj = []
+                        assignment = update_assignment(
+                            assign_obj, mem_assign_obj, token
+                        )
+                        if assignment is not None:
+                            assignments = []
+                            for assign in assignment:
+                                assignments.append({"target": assign["target"]})
+                            request_data = {
+                                "enrollmentConfigurationAssignments": assignments
+                            }
+
+                            post_assignment_update(
+                                request_data,
+                                post_request["id"],
+                                "deviceManagement/deviceEnrollmentConfigurations",
+                                "assign",
+                                token,
+                                status_code=200,
+                            )
+                        print(
+                            "Enrollment Status Page profile created with id: "
+                            + post_request["id"]
+                        )
 
-    return diff_count
+    return diff_summary
diff --git a/src/IntuneCD/update_frontend.py b/src/IntuneCD/update_frontend.py
index 22743b25..1df52f65 100644
--- a/src/IntuneCD/update_frontend.py
+++ b/src/IntuneCD/update_frontend.py
@@ -21,7 +21,7 @@ def update_frontend(frontend, data):
         raise Exception("API_KEY environment variable is not set")
 
     else:
-        headers = {'X-API-Key': API_KEY}
+        headers = {"X-API-Key": API_KEY}
         response = requests.post(frontend, json=data, headers=headers)
 
         if response.status_code != 200:
diff --git a/src/IntuneCD/update_managementIntents.py b/src/IntuneCD/update_managementIntents.py
index dbfb355c..ab88840b 100644
--- a/src/IntuneCD/update_managementIntents.py
+++ b/src/IntuneCD/update_managementIntents.py
@@ -13,13 +13,13 @@
 from .graph_batch import batch_intents, batch_assignment, get_object_assignment
 from .update_assignment import update_assignment, post_assignment_update
 from .load_file import load_file
-from .get_diff_output import get_diff_output
+from .diff_summary import DiffSummary
 
 # Set MS Graph base endpoint
 BASE_ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement"
 
 
-def update(path, token, assignment=False):
+def update(path, token, assignment=False, report=False):
     """
     This function updates all Endpoint Security configurations (intents) in Intune,
     if the configuration in Intune differs from the JSON/YAML file.
@@ -29,7 +29,7 @@ def update(path, token, assignment=False):
     :param assignment: Boolean to determine if assignments should be updated
     """
 
-    diff_count = 0
+    diff_summary = []
     # Set Intent path
     configpath = path + "/" + "Management Intents/"
     # If Intents path exists, continue
@@ -39,7 +39,8 @@ def update(path, token, assignment=False):
         intent_responses = batch_intents(intents, token)
         # Get current assignment
         mem_assignments = batch_assignment(
-            intents, 'deviceManagement/intents/', '/assignments', token)
+            intents, "deviceManagement/intents/", "/assignments", token
+        )
 
         # Set glob pattern
         pattern = configpath + "*/*"
@@ -60,112 +61,131 @@ def update(path, token, assignment=False):
                 # Create object to pass in to assignment function
                 assign_obj = {}
                 if "assignments" in repo_data:
-                    assign_obj = repo_data['assignments']
-                repo_data.pop('assignments', None)
+                    assign_obj = repo_data["assignments"]
+                repo_data.pop("assignments", None)
 
                 mem_data = {}
-                for intent in intent_responses['value']:
-                    if repo_data['displayName'] == intent['displayName'] and \
-                            repo_data['templateId'] == intent['templateId']:
+                for intent in intent_responses["value"]:
+                    if (
+                        repo_data["displayName"] == intent["displayName"]
+                        and repo_data["templateId"] == intent["templateId"]
+                    ):
 
                         mem_data = intent
 
                 # If Intent exists, continue
                 if mem_data:
                     print("-" * 90)
-                    print("Checking if Intent: " +
-                          repo_data['displayName'] + " has any updates")
+                    print(
+                        "Checking if Intent: "
+                        + repo_data["displayName"]
+                        + " has any updates"
+                    )
 
                     # Compare category settings from Intune with JSON/YAML
-                    for repo_setting in repo_data['settingsDelta']:
-                        for mem_setting in mem_data['settingsDelta']:
-                            if 'id' in mem_setting:
-                                mem_setting_id = mem_setting['id']
-                                mem_setting.pop('id', None)
-                            if repo_setting['definitionId'] == mem_setting['definitionId']:
+                    for repo_setting in repo_data["settingsDelta"]:
+                        for mem_setting in mem_data["settingsDelta"]:
+                            if "id" in mem_setting:
+                                mem_setting_id = mem_setting["id"]
+                                mem_setting.pop("id", None)
+                            if (
+                                repo_setting["definitionId"]
+                                == mem_setting["definitionId"]
+                            ):
                                 diff = DeepDiff(
-                                    mem_setting, repo_setting, ignore_order=True).get(
-                                    'values_changed', {})
+                                    mem_setting, repo_setting, ignore_order=True
+                                ).get("values_changed", {})
 
                         # If any changed values are found, push them to Intune
-                        if diff:
-                            diff_count += 1
-                            print(
-                                "Updating Intent settings: " +
-                                repo_setting['definitionId'].split("_")[1] +
-                                ", values changed:")
-                            values = get_diff_output(diff)
-                            for value in values:
-                                print(value)
+                        if diff and report is False:
                             # Create dict that we will use as the request json
                             if "value" not in repo_setting:
                                 type = "valueJson"
-                                value = repo_setting['valueJson']
+                                value = repo_setting["valueJson"]
                             else:
                                 type = "value"
-                                value = repo_setting['value']
+                                value = repo_setting["value"]
                             settings = {
                                 "settings": [
                                     {
                                         "id": mem_setting_id,
-                                        "definitionId": repo_setting['definitionId'],
-                                        "@odata.type": repo_setting['@odata.type'],
-                                        type: value}]}
+                                        "definitionId": repo_setting["definitionId"],
+                                        "@odata.type": repo_setting["@odata.type"],
+                                        type: value,
+                                    }
+                                ]
+                            }
                             request_data = json.dumps(settings)
                             q_param = None
                             makeapirequestPost(
-                                BASE_ENDPOINT +
-                                "/intents/" +
-                                mem_data['id'] +
-                                "/updateSettings",
+                                BASE_ENDPOINT
+                                + "/intents/"
+                                + mem_data["id"]
+                                + "/updateSettings",
                                 token,
                                 q_param,
                                 request_data,
-                                status_code=204)
+                                status_code=204,
+                            )
+
+                        diff_intent = DiffSummary(
+                            data=diff,
+                            name=repo_setting["definitionId"].split("_")[1],
+                            type="Intent",
+                            notify=False,
+                        )
+
+                        diff_summary.append(diff_intent)
 
                     if assignment:
                         mem_assign_obj = get_object_assignment(
-                            mem_data['id'], mem_assignments)
-                        update = update_assignment(
-                            assign_obj, mem_assign_obj, token)
+                            mem_data["id"], mem_assignments
+                        )
+                        update = update_assignment(assign_obj, mem_assign_obj, token)
                         if update is not None:
-                            request_data = {'assignments': update}
+                            request_data = {"assignments": update}
                             post_assignment_update(
                                 request_data,
-                                mem_data['id'],
-                                'deviceManagement/intents',
-                                'assign',
+                                mem_data["id"],
+                                "deviceManagement/intents",
+                                "assign",
                                 token,
-                                status_code=204)
+                                status_code=204,
+                            )
 
                 # If Intent does not exist, create it and assign
                 else:
                     print("-" * 90)
-                    print("Intent not found, creating Intent: " +
-                          repo_data['displayName'])
-                    template_id = repo_data['templateId']
-                    repo_data.pop('templateId')
-                    request_json = json.dumps(repo_data)
-                    post_request = makeapirequestPost(
-                        BASE_ENDPOINT +
-                        "/templates/" +
-                        template_id +
-                        "/createInstance",
-                        token,
-                        q_param=None,
-                        jdata=request_json)
-                    mem_assign_obj = []
-                    assignment = update_assignment(
-                        assign_obj, mem_assign_obj, token)
-                    if assignment is not None:
-                        request_data = {'assignments': assignment}
-                        post_assignment_update(
-                            request_data,
-                            post_request['id'],
-                            'deviceManagement/intents',
-                            'assign',
+                    print(
+                        "Intent not found, creating Intent: " + repo_data["displayName"]
+                    )
+                    if report is False:
+                        template_id = repo_data["templateId"]
+                        repo_data.pop("templateId")
+                        request_json = json.dumps(repo_data)
+                        post_request = makeapirequestPost(
+                            BASE_ENDPOINT
+                            + "/templates/"
+                            + template_id
+                            + "/createInstance",
                             token,
-                            status_code=204)
-                    print("Intent created with id: " + post_request['id'])
+                            q_param=None,
+                            jdata=request_json,
+                        )
+                        mem_assign_obj = []
+                        assignment = update_assignment(
+                            assign_obj, mem_assign_obj, token
+                        )
+                        if assignment is not None:
+                            request_data = {"assignments": assignment}
+                            post_assignment_update(
+                                request_data,
+                                post_request["id"],
+                                "deviceManagement/intents",
+                                "assign",
+                                token,
+                                status_code=204,
+                            )
+                        print("Intent created with id: " + post_request["id"])
 
-    return diff_count
+    return diff_summary
diff --git a/src/IntuneCD/update_notificationTemplate.py b/src/IntuneCD/update_notificationTemplate.py
index 3a9e2f6f..d4fb7632 100644
--- a/src/IntuneCD/update_notificationTemplate.py
+++ b/src/IntuneCD/update_notificationTemplate.py
@@ -12,13 +12,15 @@
 from .check_file import check_file
 from .load_file import load_file
 from .remove_keys import remove_keys
-from .get_diff_output import get_diff_output
+from .diff_summary import DiffSummary
 
 # Set MS Graph endpoint
-ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/notificationMessageTemplates"
+ENDPOINT = (
+    "https://graph.microsoft.com/beta/deviceManagement/notificationMessageTemplates"
+)
 
 
-def update(path, token):
+def update(path, token, report):
     """
     This function updates all Notification Templates in Intune,
     if the configuration in Intune differs from the JSON/YAML file.
@@ -27,7 +29,7 @@ def update(path, token):
     :param token: Token to use for authenticating the request
     """
 
-    diff_count = 0
+    diff_summary = []
     # Set Notification Template path
     configpath = path + "/" + "Compliance Policies/Message Templates/"
     # If Notification Template path exists, continue
@@ -45,129 +47,127 @@ def update(path, token):
             with open(file) as f:
                 repo_data = load_file(filename, f)
 
-                data = {'value': ''}
-                if mem_data['value']:
-                    for val in mem_data['value']:
-                        if repo_data['displayName'] == val['displayName']:
-                            data['value'] = val
+                data = {"value": ""}
+                if mem_data["value"]:
+                    for val in mem_data["value"]:
+                        if repo_data["displayName"] == val["displayName"]:
+                            data["value"] = val
 
                 # If Notification Template exists, continue
-                if data['value']:
+                if data["value"]:
                     print("-" * 90)
                     # Get Notification Template data from Intune
                     q_param = "?$expand=localizedNotificationMessages"
                     mem_template_data = makeapirequest(
-                        ENDPOINT + "/" + data['value']['id'], token, q_param)
+                        ENDPOINT + "/" + data["value"]["id"], token, q_param
+                    )
                     # Create dict to compare Intune data with JSON/YAML data
                     repo_template_data = {
-                        "displayName": repo_data['displayName'],
-                        "brandingOptions": repo_data['brandingOptions'],
-                        "roleScopeTagIds": repo_data['roleScopeTagIds']
+                        "displayName": repo_data["displayName"],
+                        "brandingOptions": repo_data["brandingOptions"],
+                        "roleScopeTagIds": repo_data["roleScopeTagIds"],
                     }
 
                     diff = DeepDiff(
-                        mem_template_data,
-                        repo_template_data,
-                        ignore_order=True).get(
-                        'values_changed',
-                        {})
+                        mem_template_data, repo_template_data, ignore_order=True
+                    ).get("values_changed", {})
 
                     # If any changed values are found, push them to Intune
-                    if diff:
-                        diff_count += 1
-                        print(
-                            "Updating Message Template: " +
-                            mem_template_data['displayName'] +
-                            ", values changed:")
-                        values = get_diff_output(diff)
-                        for value in values:
-                            print(value)
+                    if diff and report is False:
                         request_data = json.dumps(repo_template_data)
                         q_param = None
                         makeapirequestPatch(
-                            ENDPOINT +
-                            "/" +
-                            mem_template_data['id'],
+                            ENDPOINT + "/" + mem_template_data["id"],
                             token,
                             q_param,
-                            request_data)
-                    else:
-                        print("No difference found for Message Template: " +
-                              mem_template_data['displayName'])
+                            request_data,
+                        )
+
+                    diff_config = DiffSummary(
+                        data=diff,
+                        name=repo_data["displayName"],
+                        type="Notification Template",
+                    )
 
                     # Check each configured locale on the Notification Template
                     # for changes
                     for mem_locale, repo_locale in zip(
-                            mem_template_data['localizedNotificationMessages'],
-                            repo_data['localizedNotificationMessages']):
-                        del mem_locale['lastModifiedDateTime']
+                        mem_template_data["localizedNotificationMessages"],
+                        repo_data["localizedNotificationMessages"],
+                    ):
+                        del mem_locale["lastModifiedDateTime"]
                         repo_locale = remove_keys(repo_locale)
 
-                        diff = DeepDiff(
-                            mem_locale, repo_locale, ignore_order=True).get(
-                            'values_changed', {})
+                        diff = DeepDiff(mem_locale, repo_locale, ignore_order=True).get(
+                            "values_changed", {}
+                        )
 
                         # If any changed values are found, push them to Intune
-                        if diff:
-                            diff_count += 1
-                            print(
-                                "Updating Message Template locale: " +
-                                mem_locale['locale'] +
-                                " for " +
-                                mem_template_data['displayName'] +
-                                ", values changed")
-                            values = get_diff_output(diff)
-                            for value in values:
-                                print(value)
-                            repo_locale.pop('isDefault', None)
-                            repo_locale.pop('locale', None)
+                        if diff and report is False:
+                            repo_locale.pop("isDefault", None)
+                            repo_locale.pop("locale", None)
                             request_data = json.dumps(repo_locale)
                             q_param = None
                             makeapirequestPatch(
-                                ENDPOINT +
-                                "/" +
-                                mem_template_data['id'] +
-                                "/" +
-                                "localizedNotificationMessages" +
-                                "/" +
-                                mem_locale['id'],
+                                ENDPOINT
+                                + "/"
+                                + mem_template_data["id"]
+                                + "/"
+                                + "localizedNotificationMessages"
+                                + "/"
+                                + mem_locale["id"],
                                 token,
                                 q_param,
-                                request_data)
-                        else:
-                            print(
-                                "No difference in locale " +
-                                mem_locale['locale'] +
-                                " found for Message Template: " +
-                                mem_template_data['displayName'])
+                                request_data,
+                            )
+
+                        diff_locale = DiffSummary(
+                            data=diff,
+                            name=mem_locale["locale"],
+                            type="Notification Template Locale",
+                        )
+
+                        diff_config.diffs += diff_locale.diffs
+                        diff_config.count += diff_locale.count
+
+                    diff_summary.append(diff_config)
 
                 # If Notification Template does not exist, create it
                 else:
                     print("-" * 90)
                     print(
-                        "Notification template not found, creating template: " +
-                        repo_data['displayName'])
-                    template = {
-                        "brandingOptions": repo_data['brandingOptions'],
-                        "displayName": repo_data['displayName'],
-                        "roleScopeTagIds": repo_data['roleScopeTagIds']
-                    }
-                    template_request_json = json.dumps(template)
-                    template_post_request = makeapirequestPost(
-                        ENDPOINT, token, q_param=None, jdata=template_request_json, status_code=200)
-                    for locale in repo_data['localizedNotificationMessages']:
-                        locale_request_json = json.dumps(locale)
-                        makeapirequestPost(
-                            ENDPOINT +
-                            "/" +
-                            template_post_request['id'] +
-                            "/localizedNotificationMessages",
+                        "Notification template not found, creating template: "
+                        + repo_data["displayName"]
+                    )
+                    if report is False:
+                        template = {
+                            "brandingOptions": repo_data["brandingOptions"],
+                            "displayName": repo_data["displayName"],
+                            "roleScopeTagIds": repo_data["roleScopeTagIds"],
+                        }
+                        template_request_json = json.dumps(template)
+                        template_post_request = makeapirequestPost(
+                            ENDPOINT,
                             token,
                             q_param=None,
-                            jdata=locale_request_json,
-                            status_code=200)
-                    print(
-                        "Notification template created with id: " +
-                        template_post_request['id'])
+                            jdata=template_request_json,
+                            status_code=200,
+                        )
+                        for locale in repo_data["localizedNotificationMessages"]:
+                            locale_request_json = json.dumps(locale)
+                            makeapirequestPost(
+                                ENDPOINT
+                                + "/"
+                                + template_post_request["id"]
+                                + "/localizedNotificationMessages",
+                                token,
+                                q_param=None,
+                                jdata=locale_request_json,
+                                status_code=200,
+                            )
+                        print(
+                            "Notification template created with id: "
+                            + template_post_request["id"]
+                        )
 
-    return diff_count
+    return diff_summary
diff --git a/src/IntuneCD/update_powershellScripts.py b/src/IntuneCD/update_powershellScripts.py
index b2d911f7..4ecfc3d8 100644
--- a/src/IntuneCD/update_powershellScripts.py
+++ b/src/IntuneCD/update_powershellScripts.py
@@ -15,13 +15,13 @@
 from .check_file import check_file
 from .load_file import load_file
 from .remove_keys import remove_keys
-from .get_diff_output import get_diff_output
+from .diff_summary import DiffSummary
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/deviceManagementScripts"
 
 
-def update(path, token, assignment=False):
+def update(path, token, assignment=False, report=False):
     """
     This function updates all Powershell scripts in Intune if,
     the configuration in Intune differs from the JSON/YAML file.
@@ -31,7 +31,7 @@ def update(path, token, assignment=False):
     :param assignment: Boolean to determine if assignments should be updated
     """
 
-    diff_count = 0
+    diff_summary = []
     # Set Powershell script path
     configpath = path + "/" + "Scripts/Powershell"
     # If Powershell script path exists, continue
@@ -41,9 +41,10 @@ def update(path, token, assignment=False):
         # Get current assignment
         mem_assignments = batch_assignment(
             mem_powershellScript,
-            'deviceManagement/deviceManagementScripts/',
-            '/assignments',
-            token)
+            "deviceManagement/deviceManagementScripts/",
+            "/assignments",
+            token,
+        )
 
         for filename in os.listdir(configpath):
             file = check_file(configpath, filename)
@@ -57,114 +58,126 @@ def update(path, token, assignment=False):
                 # Create object to pass in to assignment function
                 assign_obj = {}
                 if "assignments" in repo_data:
-                    assign_obj = repo_data['assignments']
-                repo_data.pop('assignments', None)
+                    assign_obj = repo_data["assignments"]
+                repo_data.pop("assignments", None)
 
-                data = {'value': ''}
-                if mem_powershellScript['value']:
-                    for val in mem_powershellScript['value']:
-                        if repo_data['displayName'] == val['displayName']:
-                            data['value'] = val
+                data = {"value": ""}
+                if mem_powershellScript["value"]:
+                    for val in mem_powershellScript["value"]:
+                        if repo_data["displayName"] == val["displayName"]:
+                            data["value"] = val
 
                 # If Powershell script exists, continue
-                if data['value']:
+                if data["value"]:
                     print("-" * 90)
                     # Get Powershell script details
                     mem_data = makeapirequest(
-                        ENDPOINT + "/" + data['value']['id'], token)
-                    mem_id = mem_data['id']
+                        ENDPOINT + "/" + data["value"]["id"], token
+                    )
+                    mem_id = mem_data["id"]
                     # Remove keys before using DeepDiff
                     mem_data = remove_keys(mem_data)
 
                     # Check if script data is saved and read the file
                     if os.path.exists(
-                        configpath +
-                        "/Script Data/" +
-                            repo_data['fileName']):
-                        with open(configpath + "/Script Data/" + repo_data['fileName'], 'r') as f:
+                        configpath + "/Script Data/" + repo_data["fileName"]
+                    ):
+                        with open(
+                            configpath + "/Script Data/" + repo_data["fileName"], "r"
+                        ) as f:
                             repo_payload_config = f.read()
 
                         mem_payload_config = base64.b64decode(
-                            mem_data['scriptContent']).decode('utf-8')
+                            mem_data["scriptContent"]
+                        ).decode("utf-8")
 
                         pdiff = DeepDiff(
-                            mem_payload_config,
-                            repo_payload_config,
-                            ignore_order=True).get(
-                            'values_changed',
-                            {})
+                            mem_payload_config, repo_payload_config, ignore_order=True
+                        ).get("values_changed", {})
                         cdiff = DeepDiff(
                             mem_data,
                             repo_data,
                             ignore_order=True,
-                            exclude_paths="root['scriptContent']").get(
-                            'values_changed',
-                            {})
+                            exclude_paths="root['scriptContent']",
+                        ).get("values_changed", {})
 
                         # If any changed values are found, push them to Intune
-                        if pdiff or cdiff:
-                            print(
-                                "Updating Powershell script: " +
-                                repo_data['displayName'] +
-                                ", values changed:")
-                            if cdiff:
-                                diff_count += 1
-                                values = get_diff_output(cdiff)
-                                for value in values:
-                                    print(value)
-                            if pdiff:
-                                diff_count += 1
-                                print(
-                                    "Script changed, check commit history for change details")
-                            powershell_bytes = repo_payload_config.encode(
-                                'utf-8')
-                            repo_data['scriptContent'] = base64.b64encode(
-                                powershell_bytes).decode('utf-8')
+                        if pdiff or cdiff and report is False:
+                            powershell_bytes = repo_payload_config.encode("utf-8")
+                            repo_data["scriptContent"] = base64.b64encode(
+                                powershell_bytes
+                            ).decode("utf-8")
                             request_data = json.dumps(repo_data)
                             q_param = None
                             makeapirequestPatch(
-                                ENDPOINT + "/" + mem_id, token, q_param, request_data)
-                        else:
-                            print(
-                                'No difference found for Powershell script: ' +
-                                repo_data['displayName'])
+                                ENDPOINT + "/" + mem_id, token, q_param, request_data
+                            )
+
+                        diff_config = DiffSummary(
+                            data=cdiff,
+                            name=repo_data["displayName"],
+                            type="Powershell Script",
+                        )
+
+                        diff_script = DiffSummary(
+                            data=pdiff,
+                            name="",
+                            type="Powershell Script",
+                            message="Script changed, check commit history for details",
+                            notify=False,
+                        )
+
+                        diff_config.diffs += diff_script.diffs
+                        diff_config.count += diff_script.count
+
+                        diff_summary.append(diff_config)
 
                     if assignment:
-                        mem_assign_obj = get_object_assignment(
-                            mem_id, mem_assignments)
-                        update = update_assignment(
-                            assign_obj, mem_assign_obj, token)
+                        mem_assign_obj = get_object_assignment(mem_id, mem_assignments)
+                        update = update_assignment(assign_obj, mem_assign_obj, token)
                         if update is not None:
-                            request_data = {'deviceManagementScriptAssignments': update}
+                            request_data = {"deviceManagementScriptAssignments": update}
                             post_assignment_update(
                                 request_data,
                                 mem_id,
-                                'deviceManagement/deviceManagementScripts',
-                                'assign',
-                                token)
+                                "deviceManagement/deviceManagementScripts",
+                                "assign",
+                                token,
+                            )
 
                 # If Powershell script does not exist, create it and assign
                 else:
                     print("-" * 90)
                     print(
-                        "Powershell script not found, creating script: " +
-                        repo_data['displayName'])
-                    request_json = json.dumps(repo_data)
-                    post_request = makeapirequestPost(
-                        ENDPOINT, token, q_param=None, jdata=request_json, status_code=201)
-                    mem_assign_obj = []
-                    assignment = update_assignment(
-                        assign_obj, mem_assign_obj, token)
-                    if assignment is not None:
-                        request_data = {'deviceManagementScriptAssignments': assignment}
-                        post_assignment_update(
-                            request_data,
-                            post_request['id'],
-                            'deviceManagement/deviceManagementScripts',
-                            'assign',
-                            token)
-                    print(
-                        "Powershell script created with id: " +
-                        post_request['id'])
-
-    return diff_count
+                        "Powershell script not found, creating script: "
+                        + repo_data["displayName"]
+                    )
+                    if report is False:
+                        request_json = json.dumps(repo_data)
+                        post_request = makeapirequestPost(
+                            ENDPOINT,
+                            token,
+                            q_param=None,
+                            jdata=request_json,
+                            status_code=201,
+                        )
+                        mem_assign_obj = []
+                        assignment = update_assignment(
+                            assign_obj, mem_assign_obj, token
+                        )
+                        if assignment is not None:
+                            request_data = {
+                                "deviceManagementScriptAssignments": assignment
+                            }
+                            post_assignment_update(
+                                request_data,
+                                post_request["id"],
+                                "deviceManagement/deviceManagementScripts",
+                                "assign",
+                                token,
+                            )
+                        print(
+                            "Powershell script created with id: " + post_request["id"]
+                        )
+
+    return diff_summary
diff --git a/src/IntuneCD/update_proactiveRemediation.py b/src/IntuneCD/update_proactiveRemediation.py
index 0760c924..59eb1e96 100644
--- a/src/IntuneCD/update_proactiveRemediation.py
+++ b/src/IntuneCD/update_proactiveRemediation.py
@@ -15,14 +15,14 @@
 from .check_file import check_file
 from .load_file import load_file
 from .remove_keys import remove_keys
-from .get_diff_output import get_diff_output
+from .diff_summary import DiffSummary
 from .clean_filename import clean_filename
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/deviceHealthScripts"
 
 
-def update(path, token, assignment=False):
+def update(path, token, assignment=False, report=False):
     """
     This function updates all Proactive Remediation in Intune if,
     the configuration in Intune differs from the JSON/YAML file.
@@ -32,9 +32,9 @@ def update(path, token, assignment=False):
     :param assignment: Boolean to determine if assignments should be updated
     """
 
-    diff_count = 0
+    diff_summary = []
     # Set Powershell script path
-    configpath = f'{path}/Proactive Remediations'
+    configpath = f"{path}/Proactive Remediations"
     # If Powershell script path exists, continue
     if os.path.exists(configpath):
         # Get Proactive remediation's
@@ -42,9 +42,10 @@ def update(path, token, assignment=False):
         # Get current assignment
         mem_assignments = batch_assignment(
             mem_proactiveRemediation,
-            'deviceManagement/deviceHealthScripts/',
-            '/assignments',
-            token)
+            "deviceManagement/deviceHealthScripts/",
+            "/assignments",
+            token,
+        )
 
         for filename in os.listdir(configpath):
             file = check_file(configpath, filename)
@@ -58,132 +59,163 @@ def update(path, token, assignment=False):
                 # Create object to pass in to assignment function
                 assign_obj = {}
                 if "assignments" in repo_data:
-                    assign_obj = repo_data['assignments']
-                repo_data.pop('assignments', None)
+                    assign_obj = repo_data["assignments"]
+                repo_data.pop("assignments", None)
 
-                data = {'value': ''}
-                if mem_proactiveRemediation['value']:
-                    for val in mem_proactiveRemediation['value']:
-                        if repo_data['displayName'] == val['displayName']:
-                            data['value'] = val
+                data = {"value": ""}
+                if mem_proactiveRemediation["value"]:
+                    for val in mem_proactiveRemediation["value"]:
+                        if repo_data["displayName"] == val["displayName"]:
+                            data["value"] = val
 
                 # If Powershell script exists, continue
-                if data['value']:
+                if data["value"]:
                     print("-" * 90)
                     q_param = None
                     # Get Powershell script details
                     mem_data = makeapirequest(
-                        ENDPOINT + "/" + data['value']['id'], token, q_param)
-                    mem_id = data['value']['id']
+                        ENDPOINT + "/" + data["value"]["id"], token, q_param
+                    )
+                    mem_id = data["value"]["id"]
                     # Remove keys before using DeepDiff
                     mem_data = remove_keys(mem_data)
 
                     # Check if script data is saved and read the file
-                    fname = clean_filename(repo_data['displayName'])
-                    detection_script_name = f"{configpath}/Script Data/{fname}_DetectionScript.ps1"
-                    remediation_script_name = f"{configpath}/Script Data/{fname}_RemediationScript.ps1"
+                    fname = clean_filename(repo_data["displayName"])
+                    detection_script_name = (
+                        f"{configpath}/Script Data/{fname}_DetectionScript.ps1"
+                    )
+                    remediation_script_name = (
+                        f"{configpath}/Script Data/{fname}_RemediationScript.ps1"
+                    )
                     if os.path.exists(detection_script_name) and os.path.exists(
-                            remediation_script_name):
-                        with open(detection_script_name, 'r') as df:
+                        remediation_script_name
+                    ):
+                        with open(detection_script_name, "r") as df:
                             repo_detection_config = df.read()
-                        with open(remediation_script_name, 'r') as rf:
+                        with open(remediation_script_name, "r") as rf:
                             repo_remediation_config = rf.read()
 
                         mem_detection_config = base64.b64decode(
-                            mem_data['detectionScriptContent']).decode('utf-8')
+                            mem_data["detectionScriptContent"]
+                        ).decode("utf-8")
                         mem_remediation_config = base64.b64decode(
-                            mem_data['remediationScriptContent']).decode('utf-8')
+                            mem_data["remediationScriptContent"]
+                        ).decode("utf-8")
 
                         ddiff = DeepDiff(
                             mem_detection_config,
                             repo_detection_config,
-                            ignore_order=True).get(
-                            'values_changed',
-                            {})
+                            ignore_order=True,
+                        ).get("values_changed", {})
                         rdiff = DeepDiff(
                             mem_remediation_config,
                             repo_remediation_config,
-                            ignore_order=True).get(
-                            'values_changed',
-                            {})
+                            ignore_order=True,
+                        ).get("values_changed", {})
                         cdiff = DeepDiff(
                             mem_data,
                             repo_data,
                             ignore_order=True,
                             exclude_paths=[
                                 "root['detectionScriptContent']",
-                                "root['remediationScriptContent']"]).get(
-                            'values_changed',
-                            {})
+                                "root['remediationScriptContent']",
+                            ],
+                        ).get("values_changed", {})
 
                         # If any changed values are found, push them to Intune
-                        if cdiff or ddiff or rdiff:
-                            print(
-                                "Updating Proactive Remediation: " +
-                                repo_data['displayName'] +
-                                ", values changed:")
-                            if cdiff:
-                                diff_count += 1
-                                values = get_diff_output(cdiff)
-                                for value in values:
-                                    print(value)
-                            if ddiff:
-                                diff_count += 1
-                                print(
-                                    "Detection script changed, check commit history for change details")
-                            if rdiff:
-                                diff_count += 1
-                                print(
-                                    "Remediation script changed, check commit history for change details")
-                            detection_bytes = repo_detection_config.encode(
-                                'utf-8')
-                            remediation_bytes = repo_remediation_config.encode(
-                                'utf-8')
-                            repo_data['detectionScriptContent'] = base64.b64encode(
-                                detection_bytes).decode('utf-8')
-                            repo_data['remediationScriptContent'] = base64.b64encode(
-                                remediation_bytes).decode('utf-8')
+                        if cdiff or ddiff or rdiff and report is False:
+                            detection_bytes = repo_detection_config.encode("utf-8")
+                            remediation_bytes = repo_remediation_config.encode("utf-8")
+                            repo_data["detectionScriptContent"] = base64.b64encode(
+                                detection_bytes
+                            ).decode("utf-8")
+                            repo_data["remediationScriptContent"] = base64.b64encode(
+                                remediation_bytes
+                            ).decode("utf-8")
                             request_data = json.dumps(repo_data)
                             q_param = None
                             makeapirequestPatch(
-                                ENDPOINT + "/" + mem_id, token, q_param, request_data)
-                        else:
-                            print(
-                                'No difference found for Proactive Remediation: ' +
-                                repo_data['displayName'])
+                                ENDPOINT + "/" + mem_id, token, q_param, request_data
+                            )
+
+                        diff_config = DiffSummary(
+                            data=cdiff,
+                            name=repo_data["displayName"],
+                            type="Proactive Remediation",
+                        )
+
+                        diff_detection = DiffSummary(
+                            data=ddiff,
+                            name="",
+                            type="Detection Script",
+                            message="Detection script changed, check commit history for change details",
+                            notify=False,
+                        )
+
+                        diff_remediation = DiffSummary(
+                            data=rdiff,
+                            name="",
+                            type="Remediation Script",
+                            message="Remediation script changed, check commit history for change details",
+                            notify=False,
+                        )
+
+                        diff_config.diffs += (
+                            diff_detection.diffs + diff_remediation.diffs
+                        )
+                        diff_config.count += (
+                            diff_detection.count + diff_remediation.count
+                        )
+
+                        diff_summary.append(diff_config)
 
                     if assignment:
-                        mem_assign_obj = get_object_assignment(
-                            mem_id, mem_assignments)
-                        update = update_assignment(
-                            assign_obj, mem_assign_obj, token)
+                        mem_assign_obj = get_object_assignment(mem_id, mem_assignments)
+                        update = update_assignment(assign_obj, mem_assign_obj, token)
                         if update is not None:
-                            request_data = {'deviceHealthScriptAssignments': update}
+                            request_data = {"deviceHealthScriptAssignments": update}
                             post_assignment_update(
-                                request_data, mem_id, 'deviceManagement/deviceHealthScripts', 'assign', token)
-
-                            # If Powershell script does not exist, create it
-                            # and assign
+                                request_data,
+                                mem_id,
+                                "deviceManagement/deviceHealthScripts",
+                                "assign",
+                                token,
+                            )
+
+                # If remediation script does not exist, create it
+                # and assign
                 else:
                     print("-" * 90)
-                    print("Proactive Remediation not found, creating: " +
-                          repo_data['displayName'])
-                    request_json = json.dumps(repo_data)
-                    post_request = makeapirequestPost(
-                        ENDPOINT, token, q_param=None, jdata=request_json, status_code=201)
-                    mem_assign_obj = []
-                    assignment = update_assignment(
-                        assign_obj, mem_assign_obj, token)
-                    if assignment is not None:
-                        request_data = {'deviceHealthScriptAssignments': assignment}
-                        post_assignment_update(
-                            request_data,
-                            post_request['id'],
-                            'deviceManagement/deviceHealthScripts',
-                            'assign',
-                            token)
                     print(
-                        "Proactive Remediation created with id: " +
-                        post_request['id'])
-
-    return diff_count
+                        "Proactive Remediation not found, creating: "
+                        + repo_data["displayName"]
+                    )
+                    if report is False:
+                        request_json = json.dumps(repo_data)
+                        post_request = makeapirequestPost(
+                            ENDPOINT,
+                            token,
+                            q_param=None,
+                            jdata=request_json,
+                            status_code=201,
+                        )
+                        mem_assign_obj = []
+                        assignment = update_assignment(
+                            assign_obj, mem_assign_obj, token
+                        )
+                        if assignment is not None:
+                            request_data = {"deviceHealthScriptAssignments": assignment}
+                            post_assignment_update(
+                                request_data,
+                                post_request["id"],
+                                "deviceManagement/deviceHealthScripts",
+                                "assign",
+                                token,
+                            )
+                        print(
+                            "Proactive Remediation created with id: "
+                            + post_request["id"]
+                        )
+
+    return diff_summary
diff --git a/src/IntuneCD/update_profiles.py b/src/IntuneCD/update_profiles.py
index 8b7dcc1d..fa455e19 100644
--- a/src/IntuneCD/update_profiles.py
+++ b/src/IntuneCD/update_profiles.py
@@ -16,13 +16,13 @@
 from .check_file import check_file
 from .load_file import load_file
 from .remove_keys import remove_keys
-from .get_diff_output import get_diff_output
+from .diff_summary import DiffSummary
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/deviceConfigurations"
 
 
-def update(path, token, assignment=False):
+def update(path, token, assignment=False, report=False):
     """
     This function updates all Device Configurations in Intune,
     if the configuration in Intune differs from the JSON/YAML file.
@@ -32,7 +32,7 @@ def update(path, token, assignment=False):
     :param assignment: Boolean to determine if assignments should be updated
     """
 
-    diff_count = 0
+    diff_summary = []
     # Set Device Configurations path
     configpath = path + "/" + "Device Configurations/"
     # If Device Configurations path exists, continue
@@ -41,10 +41,8 @@ def update(path, token, assignment=False):
         mem_data = makeapirequest(ENDPOINT, token)
         # Get current assignment
         mem_assignments = batch_assignment(
-            mem_data,
-            'deviceManagement/deviceConfigurations/',
-            '/assignments',
-            token)
+            mem_data, "deviceManagement/deviceConfigurations/", "/assignments", token
+        )
 
         for filename in os.listdir(configpath):
             file = check_file(configpath, filename)
@@ -56,239 +54,290 @@ def update(path, token, assignment=False):
                 # Create object to pass in to assignment function
                 assign_obj = {}
                 if "assignments" in repo_data:
-                    assign_obj = repo_data['assignments']
-                repo_data.pop('assignments', None)
+                    assign_obj = repo_data["assignments"]
+                repo_data.pop("assignments", None)
 
                 # If Device Configuration exists, continue
-                data = {'value': ''}
-                if mem_data['value']:
+                data = {"value": ""}
+                if mem_data["value"]:
                     # Updating Windows update rings is currently not supported
-                    if repo_data['@odata.type'] == "#microsoft.graph.windowsUpdateForBusinessConfiguration":
+                    if (
+                        repo_data["@odata.type"]
+                        == "#microsoft.graph.windowsUpdateForBusinessConfiguration"
+                    ):
                         continue
 
-                    for val in mem_data['value']:
-                        if repo_data['@odata.type'] == val['@odata.type'] and \
-                                repo_data['displayName'] == val['displayName']:
-                            data['value'] = val
+                    for val in mem_data["value"]:
+                        if (
+                            repo_data["@odata.type"] == val["@odata.type"]
+                            and repo_data["displayName"] == val["displayName"]
+                        ):
+                            data["value"] = val
 
-                if data['value']:
+                if data["value"]:
 
                     print("-" * 90)
-                    mem_id = data['value']['id']
+                    mem_id = data["value"]["id"]
                     # Remove keys before using DeepDiff
-                    data['value'] = remove_keys(data['value'])
+                    data["value"] = remove_keys(data["value"])
 
                     # If Device Configuration is custom macOS or iOS, compare
                     # the .mobileconfig
-                    if ((repo_data['@odata.type'] == "#microsoft.graph.macOSCustomConfiguration") or (
-                            repo_data['@odata.type'] == "#microsoft.graph.iosCustomConfiguration")):
+                    if (
+                        repo_data["@odata.type"]
+                        == "#microsoft.graph.macOSCustomConfiguration"
+                    ) or (
+                        repo_data["@odata.type"]
+                        == "#microsoft.graph.iosCustomConfiguration"
+                    ):
                         if os.path.exists(
-                            configpath +
-                            "mobileconfig/" +
-                                repo_data['payloadFileName']):
-                            with open(configpath + "mobileconfig/" + repo_data['payloadFileName'], 'rb') as f:
+                            configpath + "mobileconfig/" + repo_data["payloadFileName"]
+                        ):
+                            with open(
+                                configpath
+                                + "mobileconfig/"
+                                + repo_data["payloadFileName"],
+                                "rb",
+                            ) as f:
                                 repo_payload_config = plistlib.load(f)
 
-                            decoded = base64.b64decode(
-                                data['value']['payload']).decode('utf-8')
-                            f = open(configpath + 'temp.mobileconfig', 'w')
+                            decoded = base64.b64decode(data["value"]["payload"]).decode(
+                                "utf-8"
+                            )
+                            f = open(configpath + "temp.mobileconfig", "w")
                             f.write(decoded)
-                            with open(configpath + 'temp.mobileconfig', 'rb') as f:
+                            with open(configpath + "temp.mobileconfig", "rb") as f:
                                 mem_payload_config = plistlib.load(f)
 
                             pdiff = DeepDiff(
                                 mem_payload_config,
                                 repo_payload_config,
-                                ignore_order=True).get(
-                                'values_changed',
-                                {})
+                                ignore_order=True,
+                            ).get("values_changed", {})
                             cdiff = DeepDiff(
-                                data['value'],
+                                data["value"],
                                 repo_data,
                                 ignore_order=True,
-                                exclude_paths="root['payload']").get(
-                                'values_changed',
-                                {})
+                                exclude_paths="root['payload']",
+                            ).get("values_changed", {})
 
                             # If any changed values are found, push them to
                             # Intune
                             if pdiff or cdiff:
-                                print(
-                                    "Updating profile: " +
-                                    repo_data['displayName'] +
-                                    ", values changed:")
-                                if pdiff:
-                                    diff_count += 1
-                                    values = get_diff_output(pdiff)
-                                    for value in values:
-                                        print(value)
-                                if cdiff:
-                                    diff_count += 1
-                                    values = get_diff_output(cdiff)
-                                    for value in values:
-                                        print(value)
-                                payload = plistlib.dumps(
-                                    repo_payload_config)
-                                repo_data['payload'] = str(
-                                    base64.b64encode(payload), 'utf-8')
-                                request_data = json.dumps(repo_data)
-                                q_param = None
-                                makeapirequestPatch(
-                                    ENDPOINT + "/" + mem_id, token, q_param, request_data, status_code=204)
-                            else:
-                                print(
-                                    'No difference found for profile: ' +
-                                    repo_data['displayName'])
 
-                            os.remove(configpath + 'temp.mobileconfig')
+                                if report is False:
+                                    payload = plistlib.dumps(repo_payload_config)
+                                    repo_data["payload"] = str(
+                                        base64.b64encode(payload), "utf-8"
+                                    )
+                                    request_data = json.dumps(repo_data)
+                                    q_param = None
+                                    makeapirequestPatch(
+                                        ENDPOINT + "/" + mem_id,
+                                        token,
+                                        q_param,
+                                        request_data,
+                                        status_code=204,
+                                    )
+
+                            diff_profile = DiffSummary(
+                                data=cdiff,
+                                name=repo_data["displayName"],
+                                type="Configuration Profile",
+                            )
+
+                            diff_config = DiffSummary(
+                                data=pdiff,
+                                name=repo_data["payloadName"],
+                                type="Mobileconfig",
+                            )
+
+                            diff_profile.diffs += diff_config.diffs
+                            diff_profile.count += diff_config.count
+                            diff_summary.append(diff_profile)
+
+                            os.remove(configpath + "temp.mobileconfig")
 
                         else:
-                            print("No mobileconfig found for profile: " +
-                                  repo_data['displayName'])
+                            print(
+                                "No mobileconfig found for profile: "
+                                + repo_data["displayName"]
+                            )
 
                     # If Device Configuration is custom Win10, compare the OMA
                     # settings
-                    elif data['value']['@odata.type'] == "#microsoft.graph.windows10CustomConfiguration":
-                        print("Checking if Win10 Custom Profile: " +
-                              repo_data['displayName'] + " has any upates")
+                    elif (
+                        data["value"]["@odata.type"]
+                        == "#microsoft.graph.windows10CustomConfiguration"
+                    ):
+                        print(
+                            "Checking if Win10 Custom Profile: "
+                            + repo_data["displayName"]
+                            + " has any upates"
+                        )
                         omas = []
-                        for setting in data['value']['omaSettings']:
-                            if setting['isEncrypted']:
+                        for setting in data["value"]["omaSettings"]:
+                            if setting["isEncrypted"]:
                                 decoded_oma = {}
                                 oma_value = makeapirequest(
-                                    ENDPOINT +
-                                    "/" +
-                                    mem_id +
-                                    "/getOmaSettingPlainTextValue(secretReferenceValueId='" +
-                                    setting['secretReferenceValueId'] +
-                                    "')",
-                                    token)
-                                decoded_oma['@odata.type'] = setting['@odata.type']
-                                decoded_oma['displayName'] = setting['displayName']
-                                decoded_oma['description'] = setting['description']
-                                decoded_oma['omaUri'] = setting['omaUri']
-                                decoded_oma['value'] = oma_value
-                                decoded_oma['isEncrypted'] = True
-                                decoded_oma['secretReferenceValueId'] = None
+                                    ENDPOINT
+                                    + "/"
+                                    + mem_id
+                                    + "/getOmaSettingPlainTextValue(secretReferenceValueId='"
+                                    + setting["secretReferenceValueId"]
+                                    + "')",
+                                    token,
+                                )
+                                decoded_oma["@odata.type"] = setting["@odata.type"]
+                                decoded_oma["displayName"] = setting["displayName"]
+                                decoded_oma["description"] = setting["description"]
+                                decoded_oma["omaUri"] = setting["omaUri"]
+                                decoded_oma["value"] = oma_value
+                                decoded_oma["isEncrypted"] = True
+                                decoded_oma["secretReferenceValueId"] = None
                                 omas.append(decoded_oma)
-                            elif not setting['isEncrypted']:
+                            elif not setting["isEncrypted"]:
                                 omas.append(setting)
 
-                        data['value'].pop('omaSettings')
-                        data['value']['omaSettings'] = omas
+                        data["value"].pop("omaSettings")
+                        data["value"]["omaSettings"] = omas
 
                         repo_omas = []
                         for mem_omaSetting, repo_omaSetting in zip(
-                                data['value']['omaSettings'], repo_data['omaSettings']):
+                            data["value"]["omaSettings"], repo_data["omaSettings"]
+                        ):
 
                             diff = DeepDiff(
                                 mem_omaSetting,
                                 repo_omaSetting,
                                 ignore_order=True,
-                                exclude_paths="root['isEncrypted']").get(
-                                'values_changed',
-                                {})
+                                exclude_paths="root['isEncrypted']",
+                            ).get("values_changed", {})
 
                             # If any changed values are found, push them to
                             # Intune
                             if diff:
-                                diff_count += 1
-                                print(
-                                    "Updating oma setting: " +
-                                    repo_omaSetting['omaUri'] +
-                                    ", values changed:")
-                                for key, value in diff.items():
-                                    new_val = value['new_value']
-                                    old_val = value['old_value']
-                                    print(
-                                        f"New Value: {new_val}, Old Value: {old_val}")
-                                if type(repo_omaSetting['value']) is dict:
-                                    repo_omaSetting = remove_keys(
-                                        repo_omaSetting)
-                                    repo_omaSetting['value'] = repo_omaSetting['value']['value']
+                                if type(repo_omaSetting["value"]) is dict:
+                                    repo_omaSetting = remove_keys(repo_omaSetting)
+                                    repo_omaSetting["value"] = repo_omaSetting["value"][
+                                        "value"
+                                    ]
                                     repo_omas.append(repo_omaSetting)
                                 else:
-                                    repo_omaSetting = remove_keys(
-                                        repo_omaSetting)
+                                    repo_omaSetting = remove_keys(repo_omaSetting)
                                     repo_omas.append(repo_omaSetting)
 
-                        repo_data.pop('omaSettings')
-                        repo_data['omaSettings'] = repo_omas
+                            diff_oma = DiffSummary(
+                                data=diff,
+                                name=repo_omaSetting["omaUri"],
+                                type="OMA Setting",
+                            )
+
+                            diff_summary.append(diff_oma)
+
+                        repo_data.pop("omaSettings")
+                        repo_data["omaSettings"] = repo_omas
 
-                        if repo_omas:
+                        if repo_omas and report is False:
                             request_data = json.dumps(repo_data)
                             q_param = None
                             makeapirequestPatch(
-                                ENDPOINT + "/" + mem_id, token, q_param, request_data, status_code=204)
+                                ENDPOINT + "/" + mem_id,
+                                token,
+                                q_param,
+                                request_data,
+                                status_code=204,
+                            )
 
                     # If Device Configuration is not custom, compare the values
                     else:
                         diff = DeepDiff(
-                            data['value'], repo_data, ignore_order=True).get(
-                            'values_changed', {})
+                            data["value"], repo_data, ignore_order=True
+                        ).get("values_changed", {})
 
                         # If any changed values are found, push them to Intune
-                        if diff:
-                            diff_count += 1
-                            print(
-                                "Updating profile: " +
-                                repo_data['displayName'] +
-                                ", values changed:")
-                            values = get_diff_output(diff)
-                            for value in values:
-                                print(value)
+                        if diff and report is False:
                             request_data = json.dumps(repo_data)
                             q_param = None
                             makeapirequestPatch(
-                                ENDPOINT + "/" + mem_id, token, q_param, request_data, status_code=204)
-                        else:
-                            print('No difference found for profile: ' +
-                                  repo_data['displayName'])
+                                ENDPOINT + "/" + mem_id,
+                                token,
+                                q_param,
+                                request_data,
+                                status_code=204,
+                            )
+
+                        diff_profile = DiffSummary(
+                            data=diff,
+                            name=repo_data["displayName"],
+                            type="Configuration Profile",
+                        )
+
+                        diff_summary.append(diff_profile)
 
                     if assignment:
-                        mem_assign_obj = get_object_assignment(
-                            mem_id, mem_assignments)
-                        update = update_assignment(
-                            assign_obj, mem_assign_obj, token)
+                        mem_assign_obj = get_object_assignment(mem_id, mem_assignments)
+                        update = update_assignment(assign_obj, mem_assign_obj, token)
                         if update is not None:
-                            request_data = {'assignments': update}
+                            request_data = {"assignments": update}
                             post_assignment_update(
-                                request_data, mem_id, 'deviceManagement/deviceConfigurations', 'assign', token)
+                                request_data,
+                                mem_id,
+                                "deviceManagement/deviceConfigurations",
+                                "assign",
+                                token,
+                            )
 
                 # If profile does not exist, create it and assign
                 else:
                     # If profile is custom win10, create correct omaSettings
                     # format before posting
-                    if repo_data['@odata.type'] == "#microsoft.graph.windows10CustomConfiguration":
+                    if (
+                        repo_data["@odata.type"]
+                        == "#microsoft.graph.windows10CustomConfiguration"
+                    ):
                         repo_omas = []
-                        for repo_omaSetting in repo_data['omaSettings']:
-                            if type(repo_omaSetting['value']) is dict:
+                        for repo_omaSetting in repo_data["omaSettings"]:
+                            if type(repo_omaSetting["value"]) is dict:
                                 repo_omaSetting = remove_keys(repo_omaSetting)
-                                repo_omaSetting['value'] = repo_omaSetting['value']['value']
+                                repo_omaSetting["value"] = repo_omaSetting["value"][
+                                    "value"
+                                ]
                                 repo_omas.append(repo_omaSetting)
                             else:
                                 repo_omaSetting = remove_keys(repo_omaSetting)
                                 repo_omas.append(repo_omaSetting)
-                        repo_data.pop('omaSettings')
-                        repo_data['omaSettings'] = repo_omas
+                        repo_data.pop("omaSettings")
+                        repo_data["omaSettings"] = repo_omas
                     # Post new profile
                     print("-" * 90)
-                    print("Profile not found, creating profile: " +
-                          repo_data['displayName'])
-                    request_json = json.dumps(repo_data)
-                    post_request = makeapirequestPost(
-                        ENDPOINT, token, q_param=None, jdata=request_json, status_code=201)
-                    mem_assign_obj = []
-                    assignment = update_assignment(
-                        assign_obj, mem_assign_obj, token)
-                    if assignment is not None:
-                        request_data = {'assignments': assignment}
-                        post_assignment_update(
-                            request_data,
-                            post_request['id'],
-                            'deviceManagement/deviceConfigurations',
-                            'assign',
-                            token)
-                    print("Profile created with id: " + post_request['id'])
-
-    return diff_count
+                    print(
+                        "Profile not found, creating profile: "
+                        + repo_data["displayName"]
+                    )
+                    if report is False:
+                        request_json = json.dumps(repo_data)
+                        post_request = makeapirequestPost(
+                            ENDPOINT,
+                            token,
+                            q_param=None,
+                            jdata=request_json,
+                            status_code=201,
+                        )
+                        print("Profile created with id: " + post_request["id"])
+
+                        mem_assign_obj = []
+                        assignment = update_assignment(
+                            assign_obj, mem_assign_obj, token
+                        )
+                        if assignment is not None:
+                            request_data = {"assignments": assignment}
+                            post_assignment_update(
+                                request_data,
+                                post_request["id"],
+                                "deviceManagement/deviceConfigurations",
+                                "assign",
+                                token,
+                            )
+
+    return diff_summary
diff --git a/src/IntuneCD/update_shellScripts.py b/src/IntuneCD/update_shellScripts.py
index 42efbe63..d5da4cb6 100644
--- a/src/IntuneCD/update_shellScripts.py
+++ b/src/IntuneCD/update_shellScripts.py
@@ -15,14 +15,16 @@
 from .check_file import check_file
 from .load_file import load_file
 from .remove_keys import remove_keys
-from .get_diff_output import get_diff_output
+from .diff_summary import DiffSummary
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/deviceShellScripts"
-ASSIGNMENT_ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/deviceManagementScripts"
+ASSIGNMENT_ENDPOINT = (
+    "https://graph.microsoft.com/beta/deviceManagement/deviceManagementScripts"
+)
 
 
-def update(path, token, assignment=False):
+def update(path, token, assignment=False, report=False):
     """
     This function updates all Shell scripts in Intune if the configuration in Intune differs from the JSON/YAML file.
 
@@ -31,7 +33,7 @@ def update(path, token, assignment=False):
     :param assignment: Boolean to determine if assignments should be updated
     """
 
-    diff_count = 0
+    diff_summary = []
     # Set Shell scritp path
     configpath = path + "/" + "Scripts/Shell"
     # If Shell script path exists, continue
@@ -41,9 +43,10 @@ def update(path, token, assignment=False):
         # Get current assignment
         mem_assignments = batch_assignment(
             mem_shellScript,
-            'deviceManagement/deviceManagementScripts/',
-            '/assignments',
-            token)
+            "deviceManagement/deviceManagementScripts/",
+            "/assignments",
+            token,
+        )
 
         for filename in os.listdir(configpath):
             file = check_file(configpath, filename)
@@ -57,114 +60,125 @@ def update(path, token, assignment=False):
                 # Create object to pass in to assignment function
                 assign_obj = {}
                 if "assignments" in repo_data:
-                    assign_obj = repo_data['assignments']
-                repo_data.pop('assignments', None)
+                    assign_obj = repo_data["assignments"]
+                repo_data.pop("assignments", None)
 
-                data = {'value': ''}
-                if mem_shellScript['value']:
-                    for val in mem_shellScript['value']:
-                        if repo_data['displayName'] == val['displayName']:
-                            data['value'] = val
+                data = {"value": ""}
+                if mem_shellScript["value"]:
+                    for val in mem_shellScript["value"]:
+                        if repo_data["displayName"] == val["displayName"]:
+                            data["value"] = val
 
                 # If Shell script exists, continue
-                if data['value']:
+                if data["value"]:
                     print("-" * 90)
                     q_param = None
                     # Get Shell script details
                     mem_data = makeapirequest(
-                        ENDPOINT + "/" + data['value']['id'], token)
-                    mem_id = mem_data['id']
+                        ENDPOINT + "/" + data["value"]["id"], token
+                    )
+                    mem_id = mem_data["id"]
                     # Remove keys before using DeepDiff
                     mem_data = remove_keys(mem_data)
 
                     # Check if script data is saved and read the file
                     if os.path.exists(
-                        configpath +
-                        "/Script Data/" +
-                            repo_data['fileName']):
-                        with open(configpath + "/Script Data/" + repo_data['fileName'], 'r') as f:
+                        configpath + "/Script Data/" + repo_data["fileName"]
+                    ):
+                        with open(
+                            configpath + "/Script Data/" + repo_data["fileName"], "r"
+                        ) as f:
                             repo_payload_config = f.read()
 
                         mem_payload_config = base64.b64decode(
-                            mem_data['scriptContent']).decode('utf-8')
+                            mem_data["scriptContent"]
+                        ).decode("utf-8")
 
                         pdiff = DeepDiff(
-                            mem_payload_config,
-                            repo_payload_config,
-                            ignore_order=True).get(
-                            'values_changed',
-                            {})
+                            mem_payload_config, repo_payload_config, ignore_order=True
+                        ).get("values_changed", {})
                         cdiff = DeepDiff(
                             mem_data,
                             repo_data,
                             ignore_order=True,
-                            exclude_paths="root['scriptContent']").get(
-                            'values_changed',
-                            {})
+                            exclude_paths="root['scriptContent']",
+                        ).get("values_changed", {})
 
                         # If any changed values are found, push them to Intune
-                        if pdiff or cdiff:
-                            print(
-                                "Updating Shell script: " +
-                                repo_data['displayName'] +
-                                ", values changed:")
-                            if cdiff:
-                                diff_count += 1
-                                values = get_diff_output(cdiff)
-                                for value in values:
-                                    print(value)
-                            if pdiff:
-                                diff_count += 1
-                                print(
-                                    "Script changed, check commit history for change details")
-                            shell_bytes = repo_payload_config.encode(
-                                'utf-8')
-                            repo_data['scriptContent'] = base64.b64encode(
-                                shell_bytes).decode('utf-8')
+                        if pdiff or cdiff and report is False:
+                            shell_bytes = repo_payload_config.encode("utf-8")
+                            repo_data["scriptContent"] = base64.b64encode(
+                                shell_bytes
+                            ).decode("utf-8")
                             request_data = json.dumps(repo_data)
                             q_param = None
                             makeapirequestPatch(
-                                ENDPOINT + "/" + mem_id, token, q_param, request_data)
-                        else:
-                            print(
-                                'No difference found for Shell script: ' +
-                                repo_data['displayName'])
+                                ENDPOINT + "/" + mem_id, token, q_param, request_data
+                            )
+
+                        diff_config = DiffSummary(
+                            data=cdiff,
+                            name=repo_data["displayName"],
+                            type="Shell Script",
+                        )
+
+                        diff_script = DiffSummary(
+                            data=pdiff,
+                            name="",
+                            type="Shell Script",
+                            message="Script changed, check commit history for details",
+                            notify=False,
+                        )
+
+                        diff_config.diffs += diff_script.diffs
+                        diff_config.count += diff_script.count
+
+                        diff_summary.append(diff_config)
 
                     if assignment:
-                        mem_assign_obj = get_object_assignment(
-                            mem_id, mem_assignments)
-                        update = update_assignment(
-                            assign_obj, mem_assign_obj, token)
+                        mem_assign_obj = get_object_assignment(mem_id, mem_assignments)
+                        update = update_assignment(assign_obj, mem_assign_obj, token)
                         if update is not None:
-                            request_data = {'deviceManagementScriptAssignments': update}
+                            request_data = {"deviceManagementScriptAssignments": update}
                             post_assignment_update(
                                 request_data,
                                 mem_id,
-                                'deviceManagement/deviceManagementScripts',
-                                'assign',
-                                token)
+                                "deviceManagement/deviceManagementScripts",
+                                "assign",
+                                token,
+                            )
 
                 # If Shell script does not exist, create it and assign
                 else:
                     print("-" * 90)
-                    print("Shell script not found, creating script: " +
-                          repo_data['displayName'])
-                    request_json = json.dumps(repo_data)
-                    post_request = makeapirequestPost(
-                        ENDPOINT, token, q_param=None, jdata=request_json, status_code=201)
-                    mem_assign_obj = []
-                    assignment = update_assignment(
-                        assign_obj, mem_assign_obj, token)
-                    if assignment is not None:
-                        request_data = {'deviceManagementScriptAssignments': assignment}
-                        post_assignment_update(
-                            request_data,
-                            post_request['id'],
-                            'deviceManagement/deviceManagementScripts',
-                            'assign',
-                            token)
                     print(
-                        "Shell script created with id: " +
-                        post_request['id'])
-
-    return diff_count
+                        "Shell script not found, creating script: "
+                        + repo_data["displayName"]
+                    )
+                    if report is False:
+                        request_json = json.dumps(repo_data)
+                        post_request = makeapirequestPost(
+                            ENDPOINT,
+                            token,
+                            q_param=None,
+                            jdata=request_json,
+                            status_code=201,
+                        )
+                        mem_assign_obj = []
+                        assignment = update_assignment(
+                            assign_obj, mem_assign_obj, token
+                        )
+                        if assignment is not None:
+                            request_data = {
+                                "deviceManagementScriptAssignments": assignment
+                            }
+                            post_assignment_update(
+                                request_data,
+                                post_request["id"],
+                                "deviceManagement/deviceManagementScripts",
+                                "assign",
+                                token,
+                            )
+                        print("Shell script created with id: " + post_request["id"])
+
+    return diff_summary
diff --git a/src/IntuneCD/update_windowsEnrollmentProfile.py b/src/IntuneCD/update_windowsEnrollmentProfile.py
index af308f4a..829f9c2b 100644
--- a/src/IntuneCD/update_windowsEnrollmentProfile.py
+++ b/src/IntuneCD/update_windowsEnrollmentProfile.py
@@ -14,13 +14,13 @@
 from .check_file import check_file
 from .load_file import load_file
 from .remove_keys import remove_keys
-from .get_diff_output import get_diff_output
+from .diff_summary import DiffSummary
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/windowsAutopilotDeploymentProfiles"
 
 
-def update(path, token, assignment=False):
+def update(path, token, assignment=False, report=False):
     """
     This function updates all Windows Enrollment Profiles in Intune,
     if the configuration in Intune differs from the JSON/YAML file.
@@ -30,7 +30,7 @@ def update(path, token, assignment=False):
     :param assignment: Boolean to determine if assignments should be updated
     """
 
-    diff_count = 0
+    diff_summary = []
     # Set Windows Enrollment Profile path
     configpath = path + "/" + "Enrollment Profiles/Windows"
     # If Windows Enrollment Profile path exists, continue
@@ -40,9 +40,10 @@ def update(path, token, assignment=False):
         # Get current assignment
         mem_assignments = batch_assignment(
             mem_data,
-            'deviceManagement/windowsAutopilotDeploymentProfiles/',
-            '/assignments',
-            token)
+            "deviceManagement/windowsAutopilotDeploymentProfiles/",
+            "/assignments",
+            token,
+        )
 
         for filename in os.listdir(configpath):
             file = check_file(configpath, filename)
@@ -56,88 +57,92 @@ def update(path, token, assignment=False):
                 # Create object to pass in to assignment function
                 assign_obj = {}
                 if "assignments" in repo_data:
-                    assign_obj = repo_data['assignments']
-                repo_data.pop('assignments', None)
+                    assign_obj = repo_data["assignments"]
+                repo_data.pop("assignments", None)
 
-                data = {'value': ''}
-                if mem_data['value']:
-                    for val in mem_data['value']:
-                        if repo_data['displayName'] == val['displayName']:
-                            data['value'] = val
+                data = {"value": ""}
+                if mem_data["value"]:
+                    for val in mem_data["value"]:
+                        if repo_data["displayName"] == val["displayName"]:
+                            data["value"] = val
 
                 # If Windows Enrollment Profile exists, continue
-                if data['value']:
+                if data["value"]:
                     print("-" * 90)
-                    mem_id = data['value']['id']
+                    mem_id = data["value"]["id"]
                     # Remove keys before using DeepDiff
-                    mem_data['value'][0] = remove_keys(mem_data['value'][0])
+                    mem_data["value"][0] = remove_keys(mem_data["value"][0])
 
-                    diff = DeepDiff(
-                        data['value'],
-                        repo_data,
-                        ignore_order=True).get(
-                        'values_changed',
-                        {})
+                    diff = DeepDiff(data["value"], repo_data, ignore_order=True).get(
+                        "values_changed", {}
+                    )
 
                     # If any changed values are found, push them to Intune
-                    if diff:
-                        diff_count += 1
-                        print("Updating Windows Enrollment profile: " +
-                              repo_data['displayName'] + ", values changed:")
-                        values = get_diff_output(diff)
-                        for value in values:
-                            print(value)
-                        if repo_data['managementServiceAppId']:
+                    if diff and report is False:
+                        if repo_data["managementServiceAppId"]:
                             pass
                         else:
-                            repo_data['managementServiceAppId'] = ""
+                            repo_data["managementServiceAppId"] = ""
                         request_data = json.dumps(repo_data)
                         q_param = None
                         makeapirequestPatch(
-                            ENDPOINT + "/" + mem_id, token, q_param, request_data)
-                    else:
-                        print(
-                            'No difference found for Windows Enrollment profile: ' +
-                            repo_data['displayName'])
+                            ENDPOINT + "/" + mem_id, token, q_param, request_data
+                        )
+
+                    diff_profile = DiffSummary(
+                        data=diff,
+                        name=repo_data["displayName"],
+                        type="Windows Enrollment Profile",
+                    )
+
+                    diff_summary.append(diff_profile)
 
                     if assignment:
-                        mem_assign_obj = get_object_assignment(
-                            mem_id, mem_assignments)
-                        update = update_assignment(
-                            assign_obj, mem_assign_obj, token)
+                        mem_assign_obj = get_object_assignment(mem_id, mem_assignments)
+                        update = update_assignment(assign_obj, mem_assign_obj, token)
                         if update is not None:
-                            request_data = {'target': update}
+                            request_data = {"target": update}
                             post_assignment_update(
                                 request_data,
                                 mem_id,
-                                'deviceManagement/windowsAutopilotDeploymentProfiles',
-                                'assign',
+                                "deviceManagement/windowsAutopilotDeploymentProfiles",
+                                "assign",
                                 token,
-                                status_code=201)
+                                status_code=201,
+                            )
 
                 # If Autopilot profile does not exist, create it and assign
                 else:
                     print("-" * 90)
                     print(
-                        "Autopilot profile not found, creating profile: " +
-                        repo_data['displayName'])
-                    request_json = json.dumps(repo_data)
-                    post_request = makeapirequestPost(
-                        ENDPOINT, token, q_param=None, jdata=request_json, status_code=201)
-                    mem_assign_obj = []
-                    assignment = update_assignment(
-                        assign_obj, mem_assign_obj, token)
-                    if assignment is not None:
-                        request_data = {'target': assignment[0]['target']}
-                        post_assignment_update(
-                            request_data,
-                            post_request['id'],
-                            'deviceManagement/windowsAutopilotDeploymentProfiles',
-                            'assignments',
+                        "Autopilot profile not found, creating profile: "
+                        + repo_data["displayName"]
+                    )
+                    if report is False:
+                        request_json = json.dumps(repo_data)
+                        post_request = makeapirequestPost(
+                            ENDPOINT,
                             token,
-                            status_code=201)
-                    print(
-                        "Autopilot profile created with id: " +
-                        post_request['id'])
+                            q_param=None,
+                            jdata=request_json,
+                            status_code=201,
+                        )
+                        mem_assign_obj = []
+                        assignment = update_assignment(
+                            assign_obj, mem_assign_obj, token
+                        )
+                        if assignment is not None:
+                            request_data = {"target": assignment[0]["target"]}
+                            post_assignment_update(
+                                request_data,
+                                post_request["id"],
+                                "deviceManagement/windowsAutopilotDeploymentProfiles",
+                                "assignments",
+                                token,
+                                status_code=201,
+                            )
+                        print(
+                            "Autopilot profile created with id: " + post_request["id"]
+                        )
 
-    return diff_count
+    return diff_summary


Test patch:
diff --git a/tests/Backup/test_backup_apns.py b/tests/Backup/test_backup_apns.py
index 191b774d..1d1da84d 100644
--- a/tests/Backup/test_backup_apns.py
+++ b/tests/Backup/test_backup_apns.py
@@ -21,7 +21,8 @@
     "certificateUploadStatus": None,
     "certificateUploadFailureReason": None,
     "certificateSerialNumber": "11000000000000",
-    "certificate": None}
+    "certificate": None,
+}
 
 
 @patch("src.IntuneCD.backup_apns.savebackup")
@@ -32,14 +33,15 @@ class TestBackupAPNS(unittest.TestCase):
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.saved_path = f"{self.directory.path}/Apple Push Notification/awesome@example.com."
         self.expected_data = {
             "appleIdentifier": "awesome@example.com",
             "expirationDateTime": "2023-04-01T13:59:54Z",
             "certificateUploadStatus": None,
             "certificateUploadFailureReason": None,
-            "certificateSerialNumber": "11000000000000"}
+            "certificateSerialNumber": "11000000000000",
+        }
 
     def tearDown(self):
         self.directory.cleanup()
@@ -47,27 +49,25 @@ def tearDown(self):
     def test_backup_yml(self, mock_data, mock_makeapirequest):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'yaml', self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             saved_data = json.loads(data)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Apple Push Notification').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Apple Push Notification").exists())
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_json(self, mock_data, mock_makeapirequest):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             saved_data = json.load(f)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Apple Push Notification').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Apple Push Notification").exists())
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, self.count)
 
@@ -75,9 +75,9 @@ def test_backup_with_no_return_data(self, mock_data, mock_makeapirequest):
         """The count should be 0 if no data is returned."""
 
         mock_data.return_value = None
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_appConfiguration.py b/tests/Backup/test_backup_appConfiguration.py
index 6ad55129..98e34006 100644
--- a/tests/Backup/test_backup_appConfiguration.py
+++ b/tests/Backup/test_backup_appConfiguration.py
@@ -11,17 +11,8 @@
 from testfixtures import TempDirectory
 from src.IntuneCD.backup_appConfiguration import savebackup
 
-BATCH_ASSIGNMENT = [
-    {
-        'value': [
-            {
-                'id': '0',
-                'target': {
-                    'groupName': 'Group1'}}]}]
-OBJECT_ASSIGNMENT = [
-    {
-        'target': {
-            'groupName': 'Group1'}}]
+BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
+OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
 
 
 class TestBackupAppConfig(unittest.TestCase):
@@ -30,61 +21,49 @@ class TestBackupAppConfig(unittest.TestCase):
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.exclude = []
         self.saved_path = f"{self.directory.path}/App Configuration/test_iosMobileAppConfiguration."
         self.expected_data = {
-            '@odata.type': '#microsoft.graph.iosMobileAppConfiguration',
-            'assignments': [
-                {
-                    'target': {
-                        'groupName': 'Group1'}}],
-            'displayName': 'test',
-            'settings': [
-                    {
-                        'appConfigKey': 'sharedDevice',
-                        'appConfigKeyType': 'booleanType',
-                        'appConfigKeyValue': 'true'}],
-            'targetedMobileApps': {
-                'appName': 'Microsoft Authenticator',
-                'type': '#microsoft.graph.iosVppApp'}}
+            "@odata.type": "#microsoft.graph.iosMobileAppConfiguration",
+            "assignments": [{"target": {"groupName": "Group1"}}],
+            "displayName": "test",
+            "settings": [{"appConfigKey": "sharedDevice", "appConfigKeyType": "booleanType", "appConfigKeyValue": "true"}],
+            "targetedMobileApps": {"appName": "Microsoft Authenticator", "type": "#microsoft.graph.iosVppApp"},
+        }
         self.app_config = {
-            '@odata.context': 'https://graph.microsoft.com/beta/$metadata#deviceAppManagement/mobileAppConfigurations',
-            'value': [
+            "@odata.context": "https://graph.microsoft.com/beta/$metadata#deviceAppManagement/mobileAppConfigurations",
+            "value": [
                 {
-                    '@odata.type': '#microsoft.graph.iosMobileAppConfiguration',
-                    'id': '0',
-                    'targetedMobileApps': ['0'],
-                    'displayName': 'test',
-                    'settings': [
-                        {
-                            'appConfigKey': 'sharedDevice',
-                            'appConfigKeyType': 'booleanType',
-                            'appConfigKeyValue': 'true'}]}]}
+                    "@odata.type": "#microsoft.graph.iosMobileAppConfiguration",
+                    "id": "0",
+                    "targetedMobileApps": ["0"],
+                    "displayName": "test",
+                    "settings": [
+                        {"appConfigKey": "sharedDevice", "appConfigKeyType": "booleanType", "appConfigKeyValue": "true"}
+                    ],
+                }
+            ],
+        }
         self.app_data = {
-            '@odata.type': '#microsoft.graph.iosVppApp',
-            'id': '0',
-            'displayName': 'Microsoft Authenticator',
-            'largeIcon': {
-                'value': '/'},
-            'licensingType': {
-                'supportsDeviceLicensing': True},
-            'applicableDeviceType': {
-                'iPhoneAndIPod': True},
-            'revokeLicenseActionResults': []}
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.backup_appConfiguration.batch_assignment')
+            "@odata.type": "#microsoft.graph.iosVppApp",
+            "id": "0",
+            "displayName": "Microsoft Authenticator",
+            "largeIcon": {"value": "/"},
+            "licensingType": {"supportsDeviceLicensing": True},
+            "applicableDeviceType": {"iPhoneAndIPod": True},
+            "revokeLicenseActionResults": [],
+        }
+
+        self.batch_assignment_patch = patch("src.IntuneCD.backup_appConfiguration.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.backup_appConfiguration.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.backup_appConfiguration.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.backup_appConfiguration.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.backup_appConfiguration.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.side_effect = self.app_config, self.app_data
 
@@ -97,49 +76,35 @@ def tearDown(self):
     def test_backup_yml(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'yaml',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.exclude, self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             saved_data = json.loads(data)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/App Configuration').exists())
+        self.assertTrue(Path(f"{self.directory.path}/App Configuration").exists())
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_json(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             saved_data = json.load(f)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/App Configuration').exists())
+        self.assertTrue(Path(f"{self.directory.path}/App Configuration").exists())
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_with_no_returned_data(self):
         """The count should be 0 if no data is returned."""
-        self.makeapirequest.side_effect = [{'value': []}]
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.makeapirequest.side_effect = [{"value": []}]
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_appProtection.py b/tests/Backup/test_backup_appProtection.py
index a22d2d42..bea1d1b9 100644
--- a/tests/Backup/test_backup_appProtection.py
+++ b/tests/Backup/test_backup_appProtection.py
@@ -11,17 +11,8 @@
 from testfixtures import TempDirectory
 from src.IntuneCD.backup_AppProtection import savebackup
 
-BATCH_ASSIGNMENT = [
-    {
-        'value': [
-            {
-                'id': '0',
-                'target': {
-                    'groupName': 'Group1'}}]}]
-OBJECT_ASSIGNMENT = [
-    {
-        'target': {
-            'groupName': 'Group1'}}]
+BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
+OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
 
 
 class TestBackupAppProtection(unittest.TestCase):
@@ -30,44 +21,49 @@ class TestBackupAppProtection(unittest.TestCase):
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.exclude = []
         self.saved_path = f"{self.directory.path}/App Protection/test_iosManagedAppProtection."
         self.saved_targetedAppManagementLevels = f"{self.directory.path}/App Protection/test_test."
-        self.expected_data = {"@odata.type": "#microsoft.graph.iosManagedAppProtection",
-                              "displayName": "test",
-                              "description": "",
-                              "roleScopeTagIds": ["0"],
-                              "exemptedAppProtocols": [{"name": "Default",
-                                                        "value": "skype;app-settings;calshow;itms;itmss;itms-apps;itms-appss;itms-services;"}],
-                              "assignments": [{"target": {"groupName": "Group1"}}]}
+        self.expected_data = {
+            "@odata.type": "#microsoft.graph.iosManagedAppProtection",
+            "displayName": "test",
+            "description": "",
+            "roleScopeTagIds": ["0"],
+            "exemptedAppProtocols": [
+                {"name": "Default", "value": "skype;app-settings;calshow;itms;itmss;itms-apps;itms-appss;itms-services;"}
+            ],
+            "assignments": [{"target": {"groupName": "Group1"}}],
+        }
         self.app_protection = {
-            '@odata.context': 'https://graph.microsoft.com/beta/$metadata#deviceAppManagement/managedAppPolicies',
-            'value': [
+            "@odata.context": "https://graph.microsoft.com/beta/$metadata#deviceAppManagement/managedAppPolicies",
+            "value": [
                 {
-                    '@odata.type': '#microsoft.graph.iosManagedAppProtection',
-                    'displayName': 'test',
-                    'id': 'T_0',
-                    'description': '',
-                    'roleScopeTagIds': ['0'],
-                    'version': '"0"',
-                    'exemptedAppProtocols': [
+                    "@odata.type": "#microsoft.graph.iosManagedAppProtection",
+                    "displayName": "test",
+                    "id": "T_0",
+                    "description": "",
+                    "roleScopeTagIds": ["0"],
+                    "version": '"0"',
+                    "exemptedAppProtocols": [
                         {
-                            'name': 'Default',
-                            'value': 'skype;app-settings;calshow;itms;itmss;itms-apps;itms-appss;itms-services;'}]}]}
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.backup_AppProtection.batch_assignment')
+                            "name": "Default",
+                            "value": "skype;app-settings;calshow;itms;itmss;itms-apps;itms-appss;itms-services;",
+                        }
+                    ],
+                }
+            ],
+        }
+
+        self.batch_assignment_patch = patch("src.IntuneCD.backup_AppProtection.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.backup_AppProtection.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.backup_AppProtection.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.backup_AppProtection.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.backup_AppProtection.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.app_protection
 
@@ -80,78 +76,57 @@ def tearDown(self):
     def test_backup_yml(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'yaml',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.exclude, self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             self.saved_data = json.loads(data)
 
-        self.assertTrue(Path(f'{self.directory.path}/App Protection').exists())
+        self.assertTrue(Path(f"{self.directory.path}/App Protection").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_json(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             self.saved_data = json.load(f)
 
-        self.assertTrue(Path(f'{self.directory.path}/App Protection').exists())
+        self.assertTrue(Path(f"{self.directory.path}/App Protection").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_targetedManagedAppConfiguration(self):
         """The count should be 0 since the targetedManagedAppConfiguration is not supported."""
 
-        self.makeapirequest.return_value = {'value': [
-            {'@odata.type': '#microsoft.graph.targetedManagedAppConfiguration'}]}
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.makeapirequest.return_value = {"value": [{"@odata.type": "#microsoft.graph.targetedManagedAppConfiguration"}]}
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
         self.assertEqual(0, self.count)
 
     def test_backup_targetedAppManagementLevels(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.app_protection['value'][0]['targetedAppManagementLevels'] = "test"
-        self.expected_data['targetedAppManagementLevels'] = "test"
+        self.app_protection["value"][0]["targetedAppManagementLevels"] = "test"
+        self.expected_data["targetedAppManagementLevels"] = "test"
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
-        with open(self.saved_targetedAppManagementLevels + 'json', 'r') as f:
+        with open(self.saved_targetedAppManagementLevels + "json", "r") as f:
             self.saved_data = json.load(f)
 
-        self.assertTrue(Path(f'{self.directory.path}/App Protection').exists())
+        self.assertTrue(Path(f"{self.directory.path}/App Protection").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_with_no_returned_data(self):
         """The count should be 0 if no data is returned."""
 
-        self.makeapirequest.return_value = {'value': []}
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.makeapirequest.return_value = {"value": []}
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_appleEnrollmentProfile.py b/tests/Backup/test_backup_appleEnrollmentProfile.py
index 4eaf60da..00e9e74b 100644
--- a/tests/Backup/test_backup_appleEnrollmentProfile.py
+++ b/tests/Backup/test_backup_appleEnrollmentProfile.py
@@ -12,102 +12,96 @@
 from testfixtures import TempDirectory
 
 TOKEN_RESPONSE = {
-    '@odata.context': 'https://graph.microsoft.com/beta/$metadata#deviceManagement/depOnboardingSettings',
-    '@odata.count': 0,
-    'value': [
+    "@odata.context": "https://graph.microsoft.com/beta/$metadata#deviceManagement/depOnboardingSettings",
+    "@odata.count": 0,
+    "value": [
         {
-            'id': '0000000',
-            'appleIdentifier': 'awesome@example.com',
-            'tokenType': 'dep',
-            'tokenName': 'Test',
-            'roleScopeTagIds': ['0']}]}
+            "id": "0000000",
+            "appleIdentifier": "awesome@example.com",
+            "tokenType": "dep",
+            "tokenName": "Test",
+            "roleScopeTagIds": ["0"],
+        }
+    ],
+}
 BATCH_INTUNE = [
     {
-        'value': [
+        "value": [
             {
-                '@odata.type': '#microsoft.graph.depMacOSEnrollmentProfile',
-                'id': '0',
-                'displayName': 'test',
-                'description': '',
-                'requiresUserAuthentication': True,
-                'configurationEndpointUrl': 'https://appleconfigurator2.manage.microsoft.com/MDMServiceConfig?id=0',
-                'enableAuthenticationViaCompanyPortal': False,
-                'requireCompanyPortalOnSetupAssistantEnrolledDevices': False,
-                'isDefault': True}]}]
+                "@odata.type": "#microsoft.graph.depMacOSEnrollmentProfile",
+                "id": "0",
+                "displayName": "test",
+                "description": "",
+                "requiresUserAuthentication": True,
+                "configurationEndpointUrl": "https://appleconfigurator2.manage.microsoft.com/MDMServiceConfig?id=0",
+                "enableAuthenticationViaCompanyPortal": False,
+                "requireCompanyPortalOnSetupAssistantEnrolledDevices": False,
+                "isDefault": True,
+            }
+        ]
+    }
+]
 
 
 @patch("src.IntuneCD.backup_appleEnrollmentProfile.savebackup")
-@patch("src.IntuneCD.backup_appleEnrollmentProfile.makeapirequest",
-       return_value=TOKEN_RESPONSE)
-@patch("src.IntuneCD.backup_appleEnrollmentProfile.batch_request",
-       return_value=BATCH_INTUNE)
+@patch("src.IntuneCD.backup_appleEnrollmentProfile.makeapirequest", return_value=TOKEN_RESPONSE)
+@patch("src.IntuneCD.backup_appleEnrollmentProfile.batch_request", return_value=BATCH_INTUNE)
 class TestBackupAppleEnrollmentProfile(unittest.TestCase):
     """Test class for backup_appleEnrollmentProfile."""
 
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.saved_path = f"{self.directory.path}/Enrollment Profiles/Apple/test."
         self.expected_data = {
-            '@odata.type': '#microsoft.graph.depMacOSEnrollmentProfile',
-            'displayName': 'test',
-            'description': '',
-            'requiresUserAuthentication': True,
-            'configurationEndpointUrl': 'https://appleconfigurator2.manage.microsoft.com/MDMServiceConfig?id=0',
-            'enableAuthenticationViaCompanyPortal': False,
-            'requireCompanyPortalOnSetupAssistantEnrolledDevices': False,
-            'isDefault': True}
+            "@odata.type": "#microsoft.graph.depMacOSEnrollmentProfile",
+            "displayName": "test",
+            "description": "",
+            "requiresUserAuthentication": True,
+            "configurationEndpointUrl": "https://appleconfigurator2.manage.microsoft.com/MDMServiceConfig?id=0",
+            "enableAuthenticationViaCompanyPortal": False,
+            "requireCompanyPortalOnSetupAssistantEnrolledDevices": False,
+            "isDefault": True,
+        }
 
     def tearDown(self):
         self.directory.cleanup()
 
-    def test_backup_yml(
-            self,
-            mock_data,
-            mock_makeapirequest,
-            mock_batch_request):
+    def test_backup_yml(self, mock_data, mock_makeapirequest, mock_batch_request):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'yaml', self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             self.saved_data = json.loads(data)
 
-        self.assertTrue(Path(f'{self.directory.path}/Enrollment Profiles/Apple').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Enrollment Profiles/Apple").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
-    def test_backup_json(
-            self,
-            mock_data,
-            mock_makeapirequest,
-            mock_batch_request):
+    def test_backup_json(self, mock_data, mock_makeapirequest, mock_batch_request):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             self.saved_data = json.loads(data)
 
-        self.assertTrue(Path(f'{self.directory.path}/Enrollment Profiles/Apple').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Enrollment Profiles/Apple").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
-    def test_backup_with_no_return_data(
-            self,
-            mock_data,
-            mock_makeapirequest,
-            mock_batch_request):
+    def test_backup_with_no_return_data(self, mock_data, mock_makeapirequest, mock_batch_request):
         """The count should be 0 if no data is returned."""
 
-        mock_makeapirequest.return_value = {'value': []}
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        mock_makeapirequest.return_value = {"value": []}
+        self.count = savebackup(self.directory.path, "json", self.token)
 
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_applications.py b/tests/Backup/test_backup_applications.py
index b256beea..0b778951 100644
--- a/tests/Backup/test_backup_applications.py
+++ b/tests/Backup/test_backup_applications.py
@@ -17,37 +17,25 @@ class TestBackupApplications(unittest.TestCase):
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.exclude = []
-        self.app_base_data = {'value': [{
-            "@odata.type": '',
-            "id": "0",
-            "displayName": "test",
-            "vppTokenAppleId": "test@test.com"}]}
+        self.app_base_data = {
+            "value": [{"@odata.type": "", "id": "0", "displayName": "test", "vppTokenAppleId": "test@test.com"}]
+        }
         self.batch_assignment_data = [
-            {
-                'value': [
-                    {
-                        'target': {
-                            'groupId': '00000-0000-0000-0000-000000000000',
-                            'groupName': 'Group1'}}]}]
-        self.object_assignment_data = [
-            {
-                'target': {
-                    'groupName': 'Group1'}}]
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.backup_applications.batch_assignment')
+            {"value": [{"target": {"groupId": "00000-0000-0000-0000-000000000000", "groupName": "Group1"}}]}
+        ]
+        self.object_assignment_data = [{"target": {"groupName": "Group1"}}]
+
+        self.batch_assignment_patch = patch("src.IntuneCD.backup_applications.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = self.batch_assignment_data
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.backup_applications.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.backup_applications.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = self.object_assignment_data
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.backup_applications.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.backup_applications.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
 
     def tearDown(self):
@@ -59,236 +47,132 @@ def tearDown(self):
     def test_backup_ios_vpp_app(self):
         """The folder should be created, the file should be created, and the count should be 1."""
 
-        self.app_base_data['value'][0]['@odata.type'] = '#microsoft.graph.iosVppApp'
+        self.app_base_data["value"][0]["@odata.type"] = "#microsoft.graph.iosVppApp"
         self.makeapirequest.return_value = self.app_base_data
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
-
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/iOS').exists())
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/iOS/test_iOSVppApp_test.json').exists())
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
+
+        self.assertTrue(Path(self.directory.path + "/Applications/iOS").exists())
+        self.assertTrue(Path(self.directory.path + "/Applications/iOS/test_iOSVppApp_test.json").exists())
         self.assertEqual(1, self.count)
 
     def test_backup_macOS_vpp_app(self):
         """The folder should be created, the file should be created, and the count should be 1."""
 
-        self.app_base_data['value'][0]['@odata.type'] = '#microsoft.graph.macOsVppApp'
+        self.app_base_data["value"][0]["@odata.type"] = "#microsoft.graph.macOsVppApp"
         self.makeapirequest.return_value = self.app_base_data
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
-
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/macOS').exists())
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/macOS/test_macOSVppApp_test.json').exists())
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
+
+        self.assertTrue(Path(self.directory.path + "/Applications/macOS").exists())
+        self.assertTrue(Path(self.directory.path + "/Applications/macOS/test_macOSVppApp_test.json").exists())
         self.assertEqual(1, self.count)
 
     def test_backup_win32_lob_app_and_displayVersion(self):
         """The folder should be created, the file should be created, and the count should be 1."""
 
-        self.app_base_data['value'][0]['@odata.type'] = '#microsoft.graph.win32LobApp'
-        self.app_base_data['value'][0]['displayVersion'] = '1.0.0'
+        self.app_base_data["value"][0]["@odata.type"] = "#microsoft.graph.win32LobApp"
+        self.app_base_data["value"][0]["displayVersion"] = "1.0.0"
         self.makeapirequest.return_value = self.app_base_data
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
-
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/Windows').exists())
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/Windows/test_Win32_1_0_0.json').exists())
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
+
+        self.assertTrue(Path(self.directory.path + "/Applications/Windows").exists())
+        self.assertTrue(Path(self.directory.path + "/Applications/Windows/test_Win32_1_0_0.json").exists())
         self.assertEqual(1, self.count)
 
     def test_backup_win32_lob_app_no_displayVersion(self):
         """The folder should be created, the file should be created, and the count should be 1."""
 
-        self.app_base_data['value'][0]['@odata.type'] = '#microsoft.graph.win32LobApp'
-        self.app_base_data['value'][0]['displayVersion'] = None
+        self.app_base_data["value"][0]["@odata.type"] = "#microsoft.graph.win32LobApp"
+        self.app_base_data["value"][0]["displayVersion"] = None
         self.makeapirequest.return_value = self.app_base_data
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
-
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/Windows').exists())
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/Windows/test_Win32.json').exists())
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
+
+        self.assertTrue(Path(self.directory.path + "/Applications/Windows").exists())
+        self.assertTrue(Path(self.directory.path + "/Applications/Windows/test_Win32.json").exists())
         self.assertEqual(1, self.count)
 
     def test_backup_msi_app(self):
         """The folder should be created, the file should be created, and the count should be 1."""
 
-        self.app_base_data['value'][0]['@odata.type'] = '#microsoft.graph.windowsMobileMSI'
-        self.app_base_data['value'][0]['productVersion'] = '1.0.0'
+        self.app_base_data["value"][0]["@odata.type"] = "#microsoft.graph.windowsMobileMSI"
+        self.app_base_data["value"][0]["productVersion"] = "1.0.0"
         self.makeapirequest.return_value = self.app_base_data
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
-
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/Windows').exists())
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/Windows/test_WinMSI_1_0_0.json').exists())
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
+
+        self.assertTrue(Path(self.directory.path + "/Applications/Windows").exists())
+        self.assertTrue(Path(self.directory.path + "/Applications/Windows/test_WinMSI_1_0_0.json").exists())
         self.assertEqual(1, self.count)
 
     def test_backup_android_app(self):
         """The folder should be created, the file should be created, and the count should be 1."""
 
-        self.app_base_data['value'][0]['@odata.type'] = '#microsoft.graph.androidManagedStoreApp'
+        self.app_base_data["value"][0]["@odata.type"] = "#microsoft.graph.androidManagedStoreApp"
         self.makeapirequest.return_value = self.app_base_data
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
-
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/Android').exists())
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/Android/test_androidManagedStoreApp.json').exists())
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
+
+        self.assertTrue(Path(self.directory.path + "/Applications/Android").exists())
+        self.assertTrue(Path(self.directory.path + "/Applications/Android/test_androidManagedStoreApp.json").exists())
         self.assertEqual(1, self.count)
 
     def test_backup_microsoft_app(self):
         """The folder should be created, the file should be created, and the count should be 1."""
 
-        self.app_base_data['value'][0]['@odata.type'] = '#microsoft.graph.microsoftApp'
+        self.app_base_data["value"][0]["@odata.type"] = "#microsoft.graph.microsoftApp"
         self.makeapirequest.return_value = self.app_base_data
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
-
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/Windows').exists())
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/Windows/test_microsoftApp.json').exists())
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
+
+        self.assertTrue(Path(self.directory.path + "/Applications/Windows").exists())
+        self.assertTrue(Path(self.directory.path + "/Applications/Windows/test_microsoftApp.json").exists())
         self.assertEqual(1, self.count)
 
     def test_backup_office_suite_app(self):
         """The folder should be created, the file should be created, and the count should be 1."""
 
-        self.app_base_data['value'][0]['@odata.type'] = '#microsoft.graph.microsoftOfficeSuiteApp'
+        self.app_base_data["value"][0]["@odata.type"] = "#microsoft.graph.microsoftOfficeSuiteApp"
         self.makeapirequest.return_value = self.app_base_data
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
-
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/Office Suite').exists())
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/Office Suite/test_microsoftOfficeSuiteApp.json').exists())
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
+
+        self.assertTrue(Path(self.directory.path + "/Applications/Office Suite").exists())
+        self.assertTrue(Path(self.directory.path + "/Applications/Office Suite/test_microsoftOfficeSuiteApp.json").exists())
         self.assertEqual(1, self.count)
 
     def test_backup_web_app(self):
         """The folder should be created, the file should be created, and the count should be 1."""
 
-        self.app_base_data['value'][0]['@odata.type'] = '#microsoft.graph.webApp'
+        self.app_base_data["value"][0]["@odata.type"] = "#microsoft.graph.webApp"
         self.makeapirequest.return_value = self.app_base_data
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
-
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/Web App').exists())
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/Web App/test_webApp.json').exists())
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
+
+        self.assertTrue(Path(self.directory.path + "/Applications/Web App").exists())
+        self.assertTrue(Path(self.directory.path + "/Applications/Web App/test_webApp.json").exists())
         self.assertEqual(1, self.count)
 
     def test_backup_other_app(self):
         """The folder should be created, the file should be created, and the count should be 1."""
 
-        self.app_base_data['value'][0]['@odata.type'] = '#microsoft.graph.macOSother'
+        self.app_base_data["value"][0]["@odata.type"] = "#microsoft.graph.macOSother"
         self.makeapirequest.return_value = self.app_base_data
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
-
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/macOS').exists())
-        self.assertTrue(
-            Path(
-                self.directory.path +
-                '/Applications/macOS/test_macOSother.json').exists())
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
+
+        self.assertTrue(Path(self.directory.path + "/Applications/macOS").exists())
+        self.assertTrue(Path(self.directory.path + "/Applications/macOS/test_macOSother.json").exists())
         self.assertEqual(1, self.count)
 
     def test_backup_with_no_returned_data(self):
         """The count should be 0 if no data is returned."""
         self.makeapirequest.return_value = {"value": []}
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_assignmentFilter.py b/tests/Backup/test_backup_assignmentFilter.py
index f76ae551..9dc74709 100644
--- a/tests/Backup/test_backup_assignmentFilter.py
+++ b/tests/Backup/test_backup_assignmentFilter.py
@@ -18,30 +18,30 @@
             "description": "",
             "id": "0",
             "platform": "macOS",
-            "rule": "(device.model -eq \"macbook Pro\")",
-            "roleScopeTags": ["0"]
-        }]}
+            "rule": '(device.model -eq "macbook Pro")',
+            "roleScopeTags": ["0"],
+        }
+    ]
+}
 
 
 @patch("src.IntuneCD.backup_assignmentFilters.savebackup")
-@patch("src.IntuneCD.backup_assignmentFilters.makeapirequest",
-       return_value=ASSIGNMENT_FILTER)
+@patch("src.IntuneCD.backup_assignmentFilters.makeapirequest", return_value=ASSIGNMENT_FILTER)
 class TestBackupAssignmentFilters(unittest.TestCase):
     """Test class for backup_assignmentFilters."""
 
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.saved_path = f"{self.directory.path}/Filters/macOS - Model."
         self.expected_data = {
             "displayName": "macOS - Model",
             "description": "",
             "platform": "macOS",
-            "rule": "(device.model -eq \"macbook Pro\")",
-            "roleScopeTags": [
-                "0"
-            ]}
+            "rule": '(device.model -eq "macbook Pro")',
+            "roleScopeTags": ["0"],
+        }
 
     def tearDown(self):
         self.directory.cleanup()
@@ -49,35 +49,35 @@ def tearDown(self):
     def test_backup_yml(self, mock_data, mock_makeapirequest):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'yaml', self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             self.saved_data = json.loads(data)
 
-        self.assertTrue(Path(f'{self.directory.path}/Filters').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Filters").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_json(self, mock_data, mock_makeapirequest):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             self.saved_data = json.load(f)
 
-        self.assertTrue(Path(f'{self.directory.path}/Filters').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Filters").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_with_no_return_data(self, mock_data, mock_makeapirequest):
         """The count should be 0 if no data is returned."""
 
-        mock_data.return_value = {'value': []}
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        mock_data.return_value = {"value": []}
+        self.count = savebackup(self.directory.path, "json", self.token)
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_compliance.py b/tests/Backup/test_backup_compliance.py
index 48e360ff..3106134b 100644
--- a/tests/Backup/test_backup_compliance.py
+++ b/tests/Backup/test_backup_compliance.py
@@ -11,17 +11,8 @@
 from testfixtures import TempDirectory
 from src.IntuneCD.backup_compliance import savebackup
 
-BATCH_ASSIGNMENT = [
-    {
-        'value': [
-            {
-                'id': '0',
-                'target': {
-                    'groupName': 'Group1'}}]}]
-OBJECT_ASSIGNMENT = [
-    {
-        'target': {
-            'groupName': 'Group1'}}]
+BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
+OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
 
 
 class TestBackupCompliance(unittest.TestCase):
@@ -30,43 +21,41 @@ class TestBackupCompliance(unittest.TestCase):
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.exclude = []
         self.saved_path = f"{self.directory.path}/Compliance Policies/Policies/test_iosCompliancePolicy."
-        self.expected_data = {"@odata.type": "#microsoft.graph.iosCompliancePolicy",
-                              "roleScopeTagIds": ["0"],
-                              "description": "Description value",
-                              "displayName": "test",
-                              "scheduledActionsForRule": [{"ruleName": None,
-                                                           "scheduledActionConfigurations": [{"gracePeriodHours": 0}]}],
-                              "assignments": [{"target": {"groupName": "Group1"}}]}
+        self.expected_data = {
+            "@odata.type": "#microsoft.graph.iosCompliancePolicy",
+            "roleScopeTagIds": ["0"],
+            "description": "Description value",
+            "displayName": "test",
+            "scheduledActionsForRule": [{"ruleName": None, "scheduledActionConfigurations": [{"gracePeriodHours": 0}]}],
+            "assignments": [{"target": {"groupName": "Group1"}}],
+        }
         self.compliance_policy = {
-            "value": [{
-                "@odata.type": "#microsoft.graph.iosCompliancePolicy",
-                "roleScopeTagIds": ["0"],
-                "id": "0",
-                "description": "Description value",
-                "displayName": "test",
-                "scheduledActionsForRule": [
-                    {
-                        "ruleName": None,
-                        "scheduledActionConfigurations": [
-                            {
-                                "id": "0",
-                                "gracePeriodHours": 0}]}]}]}
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.backup_compliance.batch_assignment')
+            "value": [
+                {
+                    "@odata.type": "#microsoft.graph.iosCompliancePolicy",
+                    "roleScopeTagIds": ["0"],
+                    "id": "0",
+                    "description": "Description value",
+                    "displayName": "test",
+                    "scheduledActionsForRule": [
+                        {"ruleName": None, "scheduledActionConfigurations": [{"id": "0", "gracePeriodHours": 0}]}
+                    ],
+                }
+            ]
+        }
+
+        self.batch_assignment_patch = patch("src.IntuneCD.backup_compliance.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.backup_compliance.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.backup_compliance.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.backup_compliance.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.backup_compliance.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.compliance_policy
 
@@ -79,51 +68,39 @@ def tearDown(self):
     def test_backup_yml(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        output = 'yaml'
-        count = savebackup(
-            self.directory.path,
-            output,
-            self.exclude,
-            self.token)
+        output = "yaml"
+        count = savebackup(self.directory.path, output, self.exclude, self.token)
 
-        with open(self.saved_path + output, 'r') as f:
+        with open(self.saved_path + output, "r") as f:
             data = json.dumps(yaml.safe_load(f))
             saved_data = json.loads(data)
 
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
-        self.assertTrue(Path(f'{self.directory.path}/Compliance Policies/Policies').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Compliance Policies/Policies").exists())
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, count)
 
     def test_backup_json(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        output = 'json'
-        count = savebackup(
-            self.directory.path,
-            output,
-            self.exclude,
-            self.token)
+        output = "json"
+        count = savebackup(self.directory.path, output, self.exclude, self.token)
 
-        with open(self.saved_path + output, 'r') as f:
+        with open(self.saved_path + output, "r") as f:
             saved_data = json.load(f)
 
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
-        self.assertTrue(Path(f'{self.directory.path}/Compliance Policies/Policies').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Compliance Policies/Policies").exists())
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, count)
 
     def test_backup_with_no_returned_data(self):
         """The count should be 0 if no data is returned."""
 
-        self.makeapirequest.return_value = {'value': []}
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.makeapirequest.return_value = {"value": []}
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_compliancePartner.py b/tests/Backup/test_backup_compliancePartner.py
index 53564af9..f59c8f5e 100644
--- a/tests/Backup/test_backup_compliancePartner.py
+++ b/tests/Backup/test_backup_compliancePartner.py
@@ -12,33 +12,33 @@
 from src.IntuneCD.backup_compliancePartner import savebackup
 
 COMPLIANCE_PARTNER = {
-    "value": [{
-        "@odata.type": "#microsoft.graph.complianceManagementPartner",
-        "id": "0",
-        "partnerState": "unavailable",
-        "displayName": "test",
-        "macOsOnboarded": True,
-        "macOsEnrollmentAssignments": [
-            {
-                "@odata.type": "microsoft.graph.complianceManagementPartnerAssignment",
-                "target": {
-                    "deviceAndAppManagementAssignmentFilterId": "0"
+    "value": [
+        {
+            "@odata.type": "#microsoft.graph.complianceManagementPartner",
+            "id": "0",
+            "partnerState": "unavailable",
+            "displayName": "test",
+            "macOsOnboarded": True,
+            "macOsEnrollmentAssignments": [
+                {
+                    "@odata.type": "microsoft.graph.complianceManagementPartnerAssignment",
+                    "target": {"deviceAndAppManagementAssignmentFilterId": "0"},
                 }
-            }
-        ]
-    }]}
+            ],
+        }
+    ]
+}
 
 
 @patch("src.IntuneCD.backup_compliancePartner.savebackup")
-@patch("src.IntuneCD.backup_compliancePartner.makeapirequest",
-       return_value=COMPLIANCE_PARTNER)
+@patch("src.IntuneCD.backup_compliancePartner.makeapirequest", return_value=COMPLIANCE_PARTNER)
 class TestBackupCompliancePartner(unittest.TestCase):
     """Test class for backup_assignmentFilters."""
 
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.saved_path = f"{self.directory.path}/Partner Connections/Compliance/test."
         self.expected_data = {
             "@odata.type": "#microsoft.graph.complianceManagementPartner",
@@ -48,8 +48,10 @@ def setUp(self):
             "macOsEnrollmentAssignments": [
                 {
                     "@odata.type": "microsoft.graph.complianceManagementPartnerAssignment",
-                    "target": {
-                        "deviceAndAppManagementAssignmentFilterId": "0"}}]}
+                    "target": {"deviceAndAppManagementAssignmentFilterId": "0"},
+                }
+            ],
+        }
 
     def tearDown(self):
         self.directory.cleanup()
@@ -57,27 +59,25 @@ def tearDown(self):
     def test_backup_yml(self, mock_data, mock_makeapirequest):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'yaml', self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             self.saved_data = json.loads(data)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Partner Connections/Compliance').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Partner Connections/Compliance").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_json(self, mock_data, mock_makeapirequest):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             self.saved_data = json.load(f)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Partner Connections/Compliance').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Partner Connections/Compliance").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
@@ -85,9 +85,9 @@ def test_backup_with_no_return_data(self, mock_data, mock_makeapirequest):
         """The count should be 0 if no data is returned."""
 
         mock_data.return_value = {"value": [{"partnerState": "unknown"}]}
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_conditionalAccess.py b/tests/Backup/test_backup_conditionalAccess.py
index 9a120df8..252c6f2c 100644
--- a/tests/Backup/test_backup_conditionalAccess.py
+++ b/tests/Backup/test_backup_conditionalAccess.py
@@ -12,18 +12,22 @@
 from src.IntuneCD.backup_conditionalAccess import savebackup
 
 CA_POLICY = {
-    "value": [{
-        "id": 1,
-        "displayName": "test",
-        "conditions": {
-                "clientAppTypes": ['all'],
+    "value": [
+        {
+            "id": 1,
+            "displayName": "test",
+            "conditions": {
+                "clientAppTypes": ["all"],
                 "applications": {
-                    "includeApplications": ['All'],
-                    "excludedApplications": ['d4ebce55-015a-49b5-a083-c84d1797ae8c']
-                }},
-        "grantControls": {
-            "authenticationStrength@odata.context": 'context'}
-    }]}
+                    "includeApplications": ["All"],
+                    "excludedApplications": ["d4ebce55-015a-49b5-a083-c84d1797ae8c"],
+                },
+            },
+            "grantControls": {"authenticationStrength@odata.context": "context"},
+        }
+    ]
+}
+
 
 @patch("src.IntuneCD.backup_conditionalAccess.savebackup")
 class TestBackupConditionalAccess(unittest.TestCase):
@@ -32,34 +36,39 @@ class TestBackupConditionalAccess(unittest.TestCase):
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.saved_path = f"{self.directory.path}/Conditional Access/test."
         self.policy = {
-                "value": [{
+            "value": [
+                {
                     "id": 1,
                     "displayName": "test",
                     "conditions": {
-                            "clientAppTypes": ['all'],
-                            "applications": {
-                                "includeApplications": ['All'],
-                                "excludedApplications": ['d4ebce55-015a-49b5-a083-c84d1797ae8c']
-                            }},
-                    "grantControls": {
-                        "authenticationStrength@odata.context": 'context'}
-                }]}
+                        "clientAppTypes": ["all"],
+                        "applications": {
+                            "includeApplications": ["All"],
+                            "excludedApplications": ["d4ebce55-015a-49b5-a083-c84d1797ae8c"],
+                        },
+                    },
+                    "grantControls": {"authenticationStrength@odata.context": "context"},
+                }
+            ]
+        }
         self.expected_data = {
-                    "displayName": "test",
-                    "conditions": {
-                            "clientAppTypes": ['all'],
-                            "applications": {
-                                "includeApplications": ['All'],
-                                "excludedApplications": ['d4ebce55-015a-49b5-a083-c84d1797ae8c']}},
-                    "grantControls": {}}
-
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.backup_conditionalAccess.makeapirequest')
+            "displayName": "test",
+            "conditions": {
+                "clientAppTypes": ["all"],
+                "applications": {
+                    "includeApplications": ["All"],
+                    "excludedApplications": ["d4ebce55-015a-49b5-a083-c84d1797ae8c"],
+                },
+            },
+            "grantControls": {},
+        }
+
+        self.makeapirequest_patch = patch("src.IntuneCD.backup_conditionalAccess.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
-        self.makeapirequest.side_effect = [self.policy, self.policy['value'][0]]
+        self.makeapirequest.side_effect = [self.policy, self.policy["value"][0]]
 
     def tearDown(self):
         self.directory.cleanup()
@@ -68,37 +77,35 @@ def tearDown(self):
     def test_backup_yml(self, mock_data):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'yaml', self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             self.saved_data = json.loads(data)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Conditional Access').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Conditional Access").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_json(self, mock_data):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             self.saved_data = json.load(f)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Conditional Access').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Conditional Access").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_with_no_return_data(self, mock_data):
         """The count should be 0 if no data is returned."""
 
-        self.makeapirequest.side_effect = [{'value': []}]
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.makeapirequest.side_effect = [{"value": []}]
+        self.count = savebackup(self.directory.path, "json", self.token)
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_configurationPolicies.py b/tests/Backup/test_backup_configurationPolicies.py
index 953f1ea3..12fbd33b 100644
--- a/tests/Backup/test_backup_configurationPolicies.py
+++ b/tests/Backup/test_backup_configurationPolicies.py
@@ -13,30 +13,27 @@
 
 BATCH_REQUEST = [
     {
-        '@odata.context': "https://graph.microsoft.com/beta/$metadata#deviceManagement/configurationPolicies('0')/settings",
-        '@odata.count': 2,
-        'value': [
+        "@odata.context": "https://graph.microsoft.com/beta/$metadata#deviceManagement/configurationPolicies('0')/settings",
+        "@odata.count": 2,
+        "value": [
             {
-                'id': '0',
-                'settingInstance': {
-                    '@odata.type': '#microsoft.graph.deviceManagementConfigurationChoiceSettingInstance',
-                    'settingDefinitionId': 'com.apple.managedclient.preferences_enforcementlevel',
-                    'settingInstanceTemplateReference': None,
-                    'choiceSettingValue': {
-                        'settingValueTemplateReference': None,
-                        'value': 'com.apple.managedclient.preferences_enforcementlevel_0',
-                        'children': []}}}]}]
-BATCH_ASSIGNMENT = [
-    {
-        'value': [
-            {
-                'id': '0',
-                'target': {
-                    'groupName': 'Group1'}}]}]
-OBJECT_ASSIGNMENT = [
-    {
-        'target': {
-            'groupName': 'Group1'}}]
+                "id": "0",
+                "settingInstance": {
+                    "@odata.type": "#microsoft.graph.deviceManagementConfigurationChoiceSettingInstance",
+                    "settingDefinitionId": "com.apple.managedclient.preferences_enforcementlevel",
+                    "settingInstanceTemplateReference": None,
+                    "choiceSettingValue": {
+                        "settingValueTemplateReference": None,
+                        "value": "com.apple.managedclient.preferences_enforcementlevel_0",
+                        "children": [],
+                    },
+                },
+            }
+        ],
+    }
+]
+BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
+OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
 
 
 class TestBackupConfigurationPolicy(unittest.TestCase):
@@ -45,67 +42,65 @@ class TestBackupConfigurationPolicy(unittest.TestCase):
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.exclude = []
         self.saved_path = f"{self.directory.path}/Settings Catalog/test."
         self.expected_data = {
-            '@odata.type': '#microsoft.graph.deviceManagementConfigurationPolicy',
-            'assignments': [
+            "@odata.type": "#microsoft.graph.deviceManagementConfigurationPolicy",
+            "assignments": [{"target": {"groupName": "Group1"}}],
+            "description": "Description value",
+            "name": "test",
+            "roleScopeTagIds": ["Role Scope Tag Ids value"],
+            "settings": [
                 {
-                    'target': {
-                        'groupName': 'Group1'}}],
-            'description': 'Description value',
-            'name': 'test',
-            'roleScopeTagIds': ['Role Scope Tag Ids value'],
-            'settings': [
-                    {
-                        'id': '0',
-                        'settingInstance': {
-                            '@odata.type': '#microsoft.graph.deviceManagementConfigurationChoiceSettingInstance',
-                            'choiceSettingValue': {
-                                'children': [],
-                                'settingValueTemplateReference': None,
-                                'value': 'com.apple.managedclient.preferences_enforcementlevel_0'},
-                            'settingDefinitionId': 'com.apple.managedclient.preferences_enforcementlevel',
-                            'settingInstanceTemplateReference': None}}],
-            'templateReference': {
-                '@odata.type': 'microsoft.graph.deviceManagementConfigurationPolicyTemplateReference',
-                'templateId': 'Template Id value'}}
+                    "id": "0",
+                    "settingInstance": {
+                        "@odata.type": "#microsoft.graph.deviceManagementConfigurationChoiceSettingInstance",
+                        "choiceSettingValue": {
+                            "children": [],
+                            "settingValueTemplateReference": None,
+                            "value": "com.apple.managedclient.preferences_enforcementlevel_0",
+                        },
+                        "settingDefinitionId": "com.apple.managedclient.preferences_enforcementlevel",
+                        "settingInstanceTemplateReference": None,
+                    },
+                }
+            ],
+            "templateReference": {
+                "@odata.type": "microsoft.graph.deviceManagementConfigurationPolicyTemplateReference",
+                "templateId": "Template Id value",
+            },
+        }
         self.configuration_policy = {
-            "value": [{
-                "@odata.type": "#microsoft.graph.deviceManagementConfigurationPolicy",
-                "id": "0",
-                "name": "test",
-                "description": "Description value",
-                "roleScopeTagIds": [
-                    "Role Scope Tag Ids value"
-                ],
-                "isAssigned": True,
-                "templateReference": {
-                    "@odata.type": "microsoft.graph.deviceManagementConfigurationPolicyTemplateReference",
-                    "templateId": "Template Id value"
+            "value": [
+                {
+                    "@odata.type": "#microsoft.graph.deviceManagementConfigurationPolicy",
+                    "id": "0",
+                    "name": "test",
+                    "description": "Description value",
+                    "roleScopeTagIds": ["Role Scope Tag Ids value"],
+                    "isAssigned": True,
+                    "templateReference": {
+                        "@odata.type": "microsoft.graph.deviceManagementConfigurationPolicyTemplateReference",
+                        "templateId": "Template Id value",
+                    },
                 }
-            }
             ]
         }
 
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.backup_configurationPolicies.batch_assignment')
+        self.batch_assignment_patch = patch("src.IntuneCD.backup_configurationPolicies.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
-        self.batch_request_patch = patch(
-            'src.IntuneCD.backup_configurationPolicies.batch_request')
+        self.batch_request_patch = patch("src.IntuneCD.backup_configurationPolicies.batch_request")
         self.batch_request = self.batch_request_patch.start()
         self.batch_request.return_value = BATCH_REQUEST
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.backup_configurationPolicies.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.backup_configurationPolicies.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.backup_configurationPolicies.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.backup_configurationPolicies.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.configuration_policy
 
@@ -119,47 +114,35 @@ def tearDown(self):
     def test_backup_yml(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'yaml',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.exclude, self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             self.saved_data = json.loads(data)
 
-        self.assertTrue(Path(f'{self.directory.path}/Settings Catalog').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Settings Catalog").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_json(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             self.saved_data = json.load(f)
 
-        self.assertTrue(Path(f'{self.directory.path}/Settings Catalog').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Settings Catalog").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_with_no_returned_data(self):
         """The count should be 0 if no data is returned."""
 
-        self.makeapirequest.return_value = {'value': []}
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.makeapirequest.return_value = {"value": []}
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_enrollmentStatusPage.py b/tests/Backup/test_backup_enrollmentStatusPage.py
index 9c6cda9d..a2aa53b5 100644
--- a/tests/Backup/test_backup_enrollmentStatusPage.py
+++ b/tests/Backup/test_backup_enrollmentStatusPage.py
@@ -10,16 +10,8 @@
 from testfixtures import TempDirectory
 from src.IntuneCD.backup_enrollmentStatusPage import savebackup
 
-BATCH_ASSIGNMENT = [
-    {
-        'value': [
-            {
-                'id': '0',
-                'target': {'groupName': 'Group1'}}]}]
-OBJECT_ASSIGNMENT = [
-    {
-        'target': {
-            'groupName': 'Group1'}}]
+BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
+OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
 
 
 class TestBackupEnrollmentStatusPage(unittest.TestCase):
@@ -28,35 +20,36 @@ class TestBackupEnrollmentStatusPage(unittest.TestCase):
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.exclude = []
         self.saved_path = f"{self.directory.path}/Enrollment Profiles/Windows/ESP/test."
-        self.expected_data = {'assignments': [{'target': {'groupName': 'Group1'}}], 'displayName': 'test',
-                              'selectedMobileAppNames': [
-                                  {'name': 'app1',
-                                   'type': '#microsoft.graph.mobileApp'}],
-                              '@odata.type': '#microsoft.graph.windows10EnrollmentCompletionPageConfiguration'}
+        self.expected_data = {
+            "assignments": [{"target": {"groupName": "Group1"}}],
+            "displayName": "test",
+            "selectedMobileAppNames": [{"name": "app1", "type": "#microsoft.graph.mobileApp"}],
+            "@odata.type": "#microsoft.graph.windows10EnrollmentCompletionPageConfiguration",
+        }
         self.statuspage_profile = {
-            "value": [{
-                "@odata.type": "#microsoft.graph.windows10EnrollmentCompletionPageConfiguration",
-                "displayName": "test",
-                "id": "0",
-                "selectedMobileAppIds": ["0"],
-            }]}
-        self.app_data = {'displayName': "app1", '@odata.type': '#microsoft.graph.mobileApp'}
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.backup_enrollmentStatusPage.batch_assignment')
+            "value": [
+                {
+                    "@odata.type": "#microsoft.graph.windows10EnrollmentCompletionPageConfiguration",
+                    "displayName": "test",
+                    "id": "0",
+                    "selectedMobileAppIds": ["0"],
+                }
+            ]
+        }
+        self.app_data = {"displayName": "app1", "@odata.type": "#microsoft.graph.mobileApp"}
+
+        self.batch_assignment_patch = patch("src.IntuneCD.backup_enrollmentStatusPage.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.backup_enrollmentStatusPage.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.backup_enrollmentStatusPage.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.backup_enrollmentStatusPage.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.backup_enrollmentStatusPage.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.side_effect = self.statuspage_profile, self.app_data
 
@@ -69,50 +62,38 @@ def tearDown(self):
     def test_backup_yml(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        output = 'yaml'
-        count = savebackup(
-            self.directory.path,
-            output,
-            self.exclude,
-            self.token)
+        output = "yaml"
+        count = savebackup(self.directory.path, output, self.exclude, self.token)
 
-        with open(self.saved_path + output, 'r') as f:
+        with open(self.saved_path + output, "r") as f:
             data = json.dumps(yaml.safe_load(f))
             saved_data = json.loads(data)
 
-        self.assertTrue(f'{self.directory.path}/Enrollment Profiles/Windows')
+        self.assertTrue(f"{self.directory.path}/Enrollment Profiles/Windows")
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, count)
 
     def test_backup_json(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        output = 'json'
-        count = savebackup(
-            self.directory.path,
-            output,
-            self.exclude,
-            self.token)
+        output = "json"
+        count = savebackup(self.directory.path, output, self.exclude, self.token)
 
-        with open(self.saved_path + output, 'r') as f:
+        with open(self.saved_path + output, "r") as f:
             saved_data = json.load(f)
 
-        self.assertTrue(f'{self.directory.path}/Enrollment Profiles/Windows/ESP')
+        self.assertTrue(f"{self.directory.path}/Enrollment Profiles/Windows/ESP")
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, count)
 
     def test_backup_with_no_returned_data(self):
         """The count should be 0 if no data is returned."""
 
-        self.makeapirequest.side_effect = [{'value': []}]
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.makeapirequest.side_effect = [{"value": []}]
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_groupPolicyConfiguration.py b/tests/Backup/test_backup_groupPolicyConfiguration.py
index 06b6eb2a..823d44c4 100644
--- a/tests/Backup/test_backup_groupPolicyConfiguration.py
+++ b/tests/Backup/test_backup_groupPolicyConfiguration.py
@@ -11,17 +11,8 @@
 from src.IntuneCD.backup_groupPolicyConfiguration import savebackup
 from testfixtures import TempDirectory
 
-BATCH_ASSIGNMENT = [
-    {
-        'value': [
-            {
-                'id': '0',
-                'target': {
-                    'groupName': 'Group1'}}]}]
-OBJECT_ASSIGNMENT = [
-    {
-        'target': {
-            'groupName': 'Group1'}}]
+BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
+OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
 
 
 class TestBackupGroupPolicyConfiguration(unittest.TestCase):
@@ -30,52 +21,48 @@ class TestBackupGroupPolicyConfiguration(unittest.TestCase):
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.exclude = []
         self.saved_path = f"{self.directory.path}/Group Policy Configurations/test."
         self.expected_data = {
-            'assignments': [
+            "assignments": [{"target": {"groupName": "Group1"}}],
+            "definitionValues": [
                 {
-                    'target': {
-                        'groupName': 'Group1'}}],
-            'definitionValues': [
-                {
-                    'classType': 'machine',
-                    'displayName': 'Default search provider icon',
-                    'id': '0',
-                    'policyType': 'admxIngested',
-                    'presentationValues': [],
-                    'version': '1.0'}],
-            'description': '',
-            'displayName': 'test',
-            'roleScopeTagIds': ['0']}
-        self.group_policy = {"value": [{
-            "displayName": "test",
+                    "classType": "machine",
+                    "displayName": "Default search provider icon",
+                    "id": "0",
+                    "policyType": "admxIngested",
+                    "presentationValues": [],
+                    "version": "1.0",
+                }
+            ],
             "description": "",
-            "id": "0",
-            "roleScopeTagIds": ["0"]
-        }]}
-        self.definitions = {"value": [{
-            "classType": "machine",
-            "displayName": "Default search provider icon",
-            "policyType": "admxIngested",
-            "version": "1.0",
-            "id": "0"
-        }]}
+            "displayName": "test",
+            "roleScopeTagIds": ["0"],
+        }
+        self.group_policy = {"value": [{"displayName": "test", "description": "", "id": "0", "roleScopeTagIds": ["0"]}]}
+        self.definitions = {
+            "value": [
+                {
+                    "classType": "machine",
+                    "displayName": "Default search provider icon",
+                    "policyType": "admxIngested",
+                    "version": "1.0",
+                    "id": "0",
+                }
+            ]
+        }
         self.presentations = {"value": []}
 
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.backup_groupPolicyConfiguration.batch_assignment')
+        self.batch_assignment_patch = patch("src.IntuneCD.backup_groupPolicyConfiguration.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.backup_groupPolicyConfiguration.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.backup_groupPolicyConfiguration.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.backup_groupPolicyConfiguration.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.backup_groupPolicyConfiguration.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.side_effect = self.group_policy, self.definitions, self.presentations
 
@@ -88,48 +75,36 @@ def tearDown(self):
     def test_backup_yml(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'yaml',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.exclude, self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             saved_data = json.loads(data)
 
-        self.assertTrue(Path(f'{self.directory.path}/Group Policy Configurations').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Group Policy Configurations").exists())
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_json(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             saved_data = json.load(f)
 
-        self.assertTrue(Path(f'{self.directory.path}/Group Policy Configurations').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Group Policy Configurations").exists())
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_with_no_returned_data(self):
         """The count should be 0 if no data is returned."""
 
-        self.makeapirequest.side_effect = [{'value': []}]
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.makeapirequest.side_effect = [{"value": []}]
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_managedGPlay.py b/tests/Backup/test_backup_managedGPlay.py
index c55f9b59..41bbd24a 100644
--- a/tests/Backup/test_backup_managedGPlay.py
+++ b/tests/Backup/test_backup_managedGPlay.py
@@ -14,22 +14,21 @@
 MANAGED_GPLAY = {
     "id": "0",
     "bindStatus": "boundAndValidated",
-          "lastAppSyncDateTime": "2022-01-28T12:28:48.975089Z",
-          "lastAppSyncStatus": "success",
-          "ownerUserPrincipalName": "awesome@gmail.com",
+    "lastAppSyncDateTime": "2022-01-28T12:28:48.975089Z",
+    "lastAppSyncStatus": "success",
+    "ownerUserPrincipalName": "awesome@gmail.com",
 }
 
 
 @patch("src.IntuneCD.backup_managedGPlay.savebackup")
-@patch("src.IntuneCD.backup_managedGPlay.makeapirequest",
-       return_value=MANAGED_GPLAY)
+@patch("src.IntuneCD.backup_managedGPlay.makeapirequest", return_value=MANAGED_GPLAY)
 class TestBackupManagedGPlay(unittest.TestCase):
     """Test class for backup_managedGPlay."""
 
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.saved_path = f"{self.directory.path}/Managed Google Play/awesome@gmail.com."
         self.expected_data = {
             "bindStatus": "boundAndValidated",
@@ -44,27 +43,25 @@ def tearDown(self):
     def test_backup_yml(self, mock_data, mock_makeapirequest):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'yaml', self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             saved_data = json.loads(data)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Managed Google Play').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Managed Google Play").exists())
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_json(self, mock_data, mock_makeapirequest):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             saved_data = json.load(f)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Managed Google Play').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Managed Google Play").exists())
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, self.count)
 
@@ -72,9 +69,9 @@ def test_backup_with_no_return_data(self, mock_data, mock_makeapirequest):
         """The count should be 0 if no data is returned."""
 
         mock_data.return_value = None
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_managementIntents.py b/tests/Backup/test_backup_managementIntents.py
index a5a70dd9..2f5ebd7d 100644
--- a/tests/Backup/test_backup_managementIntents.py
+++ b/tests/Backup/test_backup_managementIntents.py
@@ -11,17 +11,8 @@
 from src.IntuneCD.backup_managementIntents import savebackup
 from testfixtures import TempDirectory
 
-BATCH_ASSIGNMENT = [
-    {
-        'value': [
-            {
-                'id': '0',
-                'target': {
-                    'groupName': 'Group1'}}]}]
-OBJECT_ASSIGNMENT = [
-    {
-        'target': {
-            'groupName': 'Group1'}}]
+BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
+OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
 
 
 class TestBackupManagementIntent(unittest.TestCase):
@@ -30,51 +21,59 @@ class TestBackupManagementIntent(unittest.TestCase):
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.exclude = []
         self.saved_path = f"{self.directory.path}/Management Intents/Dummy Intent/test."
         self.expected_data = {
-            'assignments': [{'target': {'groupName': 'Group1'}}],
-            'description': 'Hi there',
+            "assignments": [{"target": {"groupName": "Group1"}}],
+            "description": "Hi there",
             "displayName": "test",
             "templateId": "0",
             "roleScopeTagIds": ["0"],
-            "settingsDelta": [{"value": True}]
-        }
-        self.intent = {"value": [{
-            "displayName": "test",
-            "id": "0",
-        }]}
-        self.template = {"value": [{
-            "displayName": "Dummy Intent",
-            "id": "0",
-        }]}
-        self.batch_intent_data = {"value": [{
-            "id": "0",
-            "displayName": "test",
-            "description": "Hi there",
-            "templateId": "0",
             "settingsDelta": [{"value": True}],
-            "roleScopeTagIds": ["0"]
-        }]}
+        }
+        self.intent = {
+            "value": [
+                {
+                    "displayName": "test",
+                    "id": "0",
+                }
+            ]
+        }
+        self.template = {
+            "value": [
+                {
+                    "displayName": "Dummy Intent",
+                    "id": "0",
+                }
+            ]
+        }
+        self.batch_intent_data = {
+            "value": [
+                {
+                    "id": "0",
+                    "displayName": "test",
+                    "description": "Hi there",
+                    "templateId": "0",
+                    "settingsDelta": [{"value": True}],
+                    "roleScopeTagIds": ["0"],
+                }
+            ]
+        }
 
-        self.batch_intent_patch = patch(
-            'src.IntuneCD.backup_managementIntents.batch_intents')
+        self.batch_intent_patch = patch("src.IntuneCD.backup_managementIntents.batch_intents")
         self.batch_intent = self.batch_intent_patch.start()
         self.batch_intent.return_value = self.batch_intent_data
 
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.backup_managementIntents.batch_assignment')
+        self.batch_assignment_patch = patch("src.IntuneCD.backup_managementIntents.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.backup_managementIntents.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.backup_managementIntents.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.backup_managementIntents.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.backup_managementIntents.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.side_effect = self.intent, self.template
 
@@ -88,35 +87,25 @@ def tearDown(self):
     def test_backup_yml(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'yaml',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.exclude, self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             saved_data = json.loads(data)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Management Intents/Dummy Intent').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Management Intents/Dummy Intent").exists())
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_json(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             saved_data = json.load(f)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Management Intents/Dummy Intent').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Management Intents/Dummy Intent").exists())
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, self.count)
 
@@ -124,14 +113,10 @@ def test_backup_with_no_returned_data(self):
         """The count should be 0 if no data is returned."""
 
         self.batch_intent.return_value = {"value": []}
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_managementPartner.py b/tests/Backup/test_backup_managementPartner.py
index d4f6a72b..b7d55ad0 100644
--- a/tests/Backup/test_backup_managementPartner.py
+++ b/tests/Backup/test_backup_managementPartner.py
@@ -12,29 +12,32 @@
 from src.IntuneCD.backup_managementPartner import savebackup
 
 MANAGEMENT_PARTNER = {
-    "value": [{
-        "@odata.type": "#microsoft.graph.managementPartner",
-        "id": "0",
-        "isConfigured": True,
-        "displayName": "test",
-    }]}
+    "value": [
+        {
+            "@odata.type": "#microsoft.graph.managementPartner",
+            "id": "0",
+            "isConfigured": True,
+            "displayName": "test",
+        }
+    ]
+}
 
 
 @patch("src.IntuneCD.backup_managementPartner.savebackup")
-@patch("src.IntuneCD.backup_managementPartner.makeapirequest",
-       return_value=MANAGEMENT_PARTNER)
+@patch("src.IntuneCD.backup_managementPartner.makeapirequest", return_value=MANAGEMENT_PARTNER)
 class TestBackupManagementPartner(unittest.TestCase):
     """Test class for backup_managementPartner."""
 
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.saved_path = f"{self.directory.path}/Partner Connections/Management/test."
         self.expected_data = {
             "@odata.type": "#microsoft.graph.managementPartner",
             "isConfigured": True,
-            "displayName": "test", }
+            "displayName": "test",
+        }
 
     def tearDown(self):
         self.directory.cleanup()
@@ -42,27 +45,25 @@ def tearDown(self):
     def test_backup_yml(self, mock_data, mock_makeapirequest):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'yaml', self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             self.saved_data = json.loads(data)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Partner Connections/Management').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Partner Connections/Management").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_json(self, mock_data, mock_makeapirequest):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             self.saved_data = json.load(f)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Partner Connections/Management').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Partner Connections/Management").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
@@ -70,9 +71,9 @@ def test_backup_with_no_return_data(self, mock_data, mock_makeapirequest):
         """The count should be 0 if no data is returned."""
 
         mock_data.return_value = {"value": [{"isConfigured": False}]}
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_notificationTemplate.py b/tests/Backup/test_backup_notificationTemplate.py
index 90ddbac4..f139558a 100644
--- a/tests/Backup/test_backup_notificationTemplate.py
+++ b/tests/Backup/test_backup_notificationTemplate.py
@@ -16,58 +16,67 @@ def side_effects_makeapirequest():
     """Mock function for makeapirequest."""
 
     MESSAGE_TEMPLATE = {
-        'value': [{'id': '0',
-                   'displayName': 'test',
-                   'defaultLocale': 'da-dk',
-                   'brandingOptions': 'includeCompanyLogo,includeCompanyName,includeContactInformation',
-                   'roleScopeTagIds': ['0'],
-                   'localizedNotificationMessages': [{'id': '0',
-                                                      'lastModifiedDateTime': '2022-07-16T00:01:14.8680508Z',
-                                                      'locale': 'da-dk',
-                                                      'subject': 'test',
-                                                      'messageTemplate': 'Danish locale demo new',
-                                                      'isDefault': True}]}]}
+        "value": [
+            {
+                "id": "0",
+                "displayName": "test",
+                "defaultLocale": "da-dk",
+                "brandingOptions": "includeCompanyLogo,includeCompanyName,includeContactInformation",
+                "roleScopeTagIds": ["0"],
+                "localizedNotificationMessages": [
+                    {
+                        "id": "0",
+                        "lastModifiedDateTime": "2022-07-16T00:01:14.8680508Z",
+                        "locale": "da-dk",
+                        "subject": "test",
+                        "messageTemplate": "Danish locale demo new",
+                        "isDefault": True,
+                    }
+                ],
+            }
+        ]
+    }
 
     LOCALIZED_MESSAGES = {
-        'id': '0',
-        'displayName': 'test',
-        'defaultLocale': 'da-dk',
-        'brandingOptions': 'includeCompanyLogo,includeCompanyName,includeContactInformation',
-        'roleScopeTagIds': ['0'],
-        'localizedNotificationMessages': [
+        "id": "0",
+        "displayName": "test",
+        "defaultLocale": "da-dk",
+        "brandingOptions": "includeCompanyLogo,includeCompanyName,includeContactInformation",
+        "roleScopeTagIds": ["0"],
+        "localizedNotificationMessages": [
             {
-                'id': '0',
-                'lastModifiedDateTime': '2022-07-16T00:03:39.8347438Z',
-                'locale': 'da-dk',
-                'subject': 'test',
-                'messageTemplate': 'Danish locale demo new',
-                'isDefault': True}]}
+                "id": "0",
+                "lastModifiedDateTime": "2022-07-16T00:03:39.8347438Z",
+                "locale": "da-dk",
+                "subject": "test",
+                "messageTemplate": "Danish locale demo new",
+                "isDefault": True,
+            }
+        ],
+    }
 
     return MESSAGE_TEMPLATE, LOCALIZED_MESSAGES
 
 
 @patch("src.IntuneCD.backup_notificationTemplate.savebackup")
-@patch("src.IntuneCD.backup_notificationTemplate.makeapirequest",
-       side_effect=side_effects_makeapirequest())
+@patch("src.IntuneCD.backup_notificationTemplate.makeapirequest", side_effect=side_effects_makeapirequest())
 class TestBackupNotificationTemplate(unittest.TestCase):
     """Test class for backup_notificationTemplate."""
 
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.saved_path = f"{self.directory.path}/Compliance Policies/Message Templates/test."
         self.expected_data = {
-            'brandingOptions': 'includeCompanyLogo,includeCompanyName,includeContactInformation',
-            'defaultLocale': 'da-dk',
-            'displayName': 'test',
-            'localizedNotificationMessages': [
-                {
-                    'isDefault': True,
-                    'locale': 'da-dk',
-                    'messageTemplate': 'Danish locale demo new',
-                    'subject': 'test'}],
-            'roleScopeTagIds': ['0']}
+            "brandingOptions": "includeCompanyLogo,includeCompanyName,includeContactInformation",
+            "defaultLocale": "da-dk",
+            "displayName": "test",
+            "localizedNotificationMessages": [
+                {"isDefault": True, "locale": "da-dk", "messageTemplate": "Danish locale demo new", "subject": "test"}
+            ],
+            "roleScopeTagIds": ["0"],
+        }
 
     def tearDown(self):
         self.directory.cleanup()
@@ -75,27 +84,25 @@ def tearDown(self):
     def test_backup_yml(self, mock_data, mock_makeapirequest):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'yaml', self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             saved_data = json.loads(data)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Compliance Policies/Message Templates').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Compliance Policies/Message Templates").exists())
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_json(self, mock_data, mock_makeapirequest):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             saved_data = json.load(f)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Compliance Policies/Message Templates').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Compliance Policies/Message Templates").exists())
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, self.count)
 
@@ -103,9 +110,9 @@ def test_backup_with_no_return_data(self, mock_data, mock_makeapirequest):
         """The count should be 0 if no data is returned."""
 
         mock_data.side_effect = [{"value": []}]
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_powershellScripts.py b/tests/Backup/test_backup_powershellScripts.py
index 1fd0971d..eab3b2d6 100644
--- a/tests/Backup/test_backup_powershellScripts.py
+++ b/tests/Backup/test_backup_powershellScripts.py
@@ -11,17 +11,8 @@
 from src.IntuneCD.backup_powershellScripts import savebackup
 from testfixtures import TempDirectory
 
-BATCH_ASSIGNMENT = [
-    {
-        'value': [
-            {
-                'id': '0',
-                'target': {
-                    'groupName': 'Group1'}}]}]
-OBJECT_ASSIGNMENT = [
-    {
-        'target': {
-            'groupName': 'Group1'}}]
+BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
+OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
 
 
 class TestBackupPowershellScript(unittest.TestCase):
@@ -30,44 +21,39 @@ class TestBackupPowershellScript(unittest.TestCase):
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.exclude = []
         self.saved_path = f"{self.directory.path}/Scripts/Powershell/test."
         self.script_content_path = f"{self.directory.path}/Scripts/Powershell/Script Data/test.ps1"
         self.expected_data = {
-            'assignments': [
-                {
-                    'target': {
-                        'groupName': 'Group1'}}],
-            'displayName': 'test',
-            'fileName': 'test',
-            'scriptContent': 'WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE='}
-        self.script_policy_data = {
-            "value": [{"id": "0", "displayName": "test"}]}
+            "assignments": [{"target": {"groupName": "Group1"}}],
+            "displayName": "test",
+            "fileName": "test",
+            "scriptContent": "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE=",
+        }
+        self.script_policy_data = {"value": [{"id": "0", "displayName": "test"}]}
         self.batch_request_data = [
             {
-                'id': '0',
-                'displayName': 'test',
-                'fileName': 'test',
-                'scriptContent': 'WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE='}]
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.backup_powershellScripts.batch_assignment')
+                "id": "0",
+                "displayName": "test",
+                "fileName": "test",
+                "scriptContent": "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE=",
+            }
+        ]
+
+        self.batch_assignment_patch = patch("src.IntuneCD.backup_powershellScripts.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.backup_powershellScripts.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.backup_powershellScripts.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
-        self.batch_request_patch = patch(
-            'src.IntuneCD.backup_powershellScripts.batch_request')
+        self.batch_request_patch = patch("src.IntuneCD.backup_powershellScripts.batch_request")
         self.batch_request = self.batch_request_patch.start()
         self.batch_request.return_value = self.batch_request_data
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.backup_powershellScripts.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.backup_powershellScripts.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.script_policy_data
 
@@ -81,50 +67,35 @@ def tearDown(self):
     def test_backup_yml(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'yaml',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.exclude, self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             self.saved_data = json.loads(data)
 
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
-        self.assertTrue(
-            Path(f'{self.directory.path}/Scripts/Powershell').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Scripts/Powershell").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_json(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             self.saved_data = json.load(f)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Scripts/Powershell').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Scripts/Powershell").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_script_is_created(self):
         """The script data folder should be created and a .ps1 file should be created."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Scripts/Powershell/Script Data').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Scripts/Powershell/Script Data").exists())
         self.assertTrue(self.script_content_path)
         self.assertEqual(1, self.count)
 
@@ -132,14 +103,10 @@ def test_backup_with_no_returned_data(self):
         """The count should be 0 if no data is returned."""
 
         self.makeapirequest.return_value = {"value": []}
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_proactiveRemediation.py b/tests/Backup/test_backup_proactiveRemediation.py
index 26f137f8..26f2b1cf 100644
--- a/tests/Backup/test_backup_proactiveRemediation.py
+++ b/tests/Backup/test_backup_proactiveRemediation.py
@@ -10,17 +10,8 @@
 from src.IntuneCD.backup_proactiveRemediation import savebackup
 from testfixtures import TempDirectory
 
-BATCH_ASSIGNMENT = [
-    {
-        'value': [
-            {
-                'id': '0',
-                'target': {
-                    'groupName': 'Group1'}}]}]
-OBJECT_ASSIGNMENT = [
-    {
-        'target': {
-            'groupName': 'Group1'}}]
+BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
+OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
 
 
 class TestBackupProactiveRemediation(unittest.TestCase):
@@ -29,47 +20,42 @@ class TestBackupProactiveRemediation(unittest.TestCase):
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.exclude = []
         self.saved_path = f"{self.directory.path}/Proactive Remediations/test."
         self.detection_script_path = f"{self.directory.path}/Proactive Remediations/Script Data/test__DetectionScript.ps1"
         self.remediation_script_path = f"{self.directory.path}/Proactive Remediations/Script Data/test__RemediationScript.ps1"
         self.expected_data = {
-            'assignments': [
-                {
-                    'target': {
-                        'groupName': 'Group1'}}],
-            'displayName': 'test',
-            'publisher': 'test',
-            'detectionScriptContent': 'WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE=',
-            'remediationScriptContent': 'WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE='}
-        self.script_policy_data = {
-            "value": [{"id": "0", "displayName": "test"}]}
+            "assignments": [{"target": {"groupName": "Group1"}}],
+            "displayName": "test",
+            "publisher": "test",
+            "detectionScriptContent": "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE=",
+            "remediationScriptContent": "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE=",
+        }
+        self.script_policy_data = {"value": [{"id": "0", "displayName": "test"}]}
         self.batch_request_data = [
             {
-                'id': '0',
-                'displayName': 'test',
+                "id": "0",
+                "displayName": "test",
                 "publisher": "test",
-                'detectionScriptContent': 'WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE=',
-                'remediationScriptContent': 'WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE='}]
+                "detectionScriptContent": "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE=",
+                "remediationScriptContent": "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE=",
+            }
+        ]
 
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.backup_proactiveRemediation.batch_assignment')
+        self.batch_assignment_patch = patch("src.IntuneCD.backup_proactiveRemediation.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.backup_proactiveRemediation.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.backup_proactiveRemediation.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
-        self.batch_request_patch = patch(
-            'src.IntuneCD.backup_proactiveRemediation.batch_request')
+        self.batch_request_patch = patch("src.IntuneCD.backup_proactiveRemediation.batch_request")
         self.batch_request = self.batch_request_patch.start()
         self.batch_request.return_value = self.batch_request_data
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.backup_proactiveRemediation.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.backup_proactiveRemediation.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.script_policy_data
 
@@ -83,88 +69,60 @@ def tearDown(self):
     def test_backup_yml(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'yaml',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.exclude, self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             self.saved_data = json.loads(data)
 
-        self.assertTrue(f'{self.directory.path}/Proactive Remediations')
+        self.assertTrue(f"{self.directory.path}/Proactive Remediations")
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(3, self.count)
 
     def test_backup_json(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             self.saved_data = json.load(f)
 
-        self.assertTrue(f'{self.directory.path}/Proactive Remediations')
+        self.assertTrue(f"{self.directory.path}/Proactive Remediations")
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(3, self.count)
 
     def test_detection_script_is_created(self):
         """The folder should be created and a .ps1 file should be created."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
-        self.assertTrue(
-            f'{self.directory.path}/Proactive Remediations/Script Data')
+        self.assertTrue(f"{self.directory.path}/Proactive Remediations/Script Data")
         self.assertTrue(self.detection_script_path)
 
     def test_remediation_script_is_created(self):
         """The folder should be created and a .ps1 file should be created."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
-        self.assertTrue(
-            f'{self.directory.path}/Proactive Remediations/Script Data')
+        self.assertTrue(f"{self.directory.path}/Proactive Remediations/Script Data")
         self.assertTrue(self.remediation_script_path)
 
     def test_publisher_is_microsoft(self):
         """Microsoft should not be backed up."""
 
-        with patch('src.IntuneCD.backup_proactiveRemediation.batch_request',
-                   side_effect=[[{'publisher': 'Microsoft'}]]):
-            self.count = savebackup(
-                self.directory.path,
-                'json',
-                self.exclude,
-                self.token)
+        with patch("src.IntuneCD.backup_proactiveRemediation.batch_request", side_effect=[[{"publisher": "Microsoft"}]]):
+            self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
         self.assertEqual(0, self.count)
 
     def test_backup_with_no_returned_data(self):
         """The count should be 0 if no data is returned."""
 
-        with patch('src.IntuneCD.backup_proactiveRemediation.makeapirequest',
-                   return_value={'value': []}):
-            self.count = savebackup(
-                self.directory.path,
-                'json',
-                self.exclude,
-                self.token)
+        with patch("src.IntuneCD.backup_proactiveRemediation.makeapirequest", return_value={"value": []}):
+            self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
         """No data should be backed up."""
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_profiles.py b/tests/Backup/test_backup_profiles.py
index a79a2b83..f9d09306 100644
--- a/tests/Backup/test_backup_profiles.py
+++ b/tests/Backup/test_backup_profiles.py
@@ -10,16 +10,8 @@
 from testfixtures import TempDirectory
 from src.IntuneCD.backup_profiles import savebackup
 
-BATCH_ASSIGNMENT = [
-    {
-        'value': [
-            {
-                'target': {
-                    'groupName': 'Group1'}}]}]
-OBJECT_ASSIGNMENT = [
-    {
-        'target': {
-            'groupName': 'Group1'}}]
+BATCH_ASSIGNMENT = [{"value": [{"target": {"groupName": "Group1"}}]}]
+OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
 
 
 class TestBackupProfiles(unittest.TestCase):
@@ -28,21 +20,18 @@ class TestBackupProfiles(unittest.TestCase):
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.exclude = []
 
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.backup_profiles.batch_assignment')
+        self.batch_assignment_patch = patch("src.IntuneCD.backup_profiles.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.backup_profiles.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.backup_profiles.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.backup_profiles.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.backup_profiles.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
 
     def tearDown(self):
@@ -54,127 +43,123 @@ def tearDown(self):
     def test_backup_macOS_custom_profile(self):
         """The folders and files should be created and the count should be 2."""
 
-        self.makeapirequest.return_value = {'value': [{
-            "@odata.type": '#microsoft.graph.macOSCustomConfiguration',
-            "id": "0",
-            "displayName": "test",
-            "payload": "SGkgdGhlcmUgcHJldHR5",
-                       "payloadFileName": "test.mobileconfig"}]}
-
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.token,
-            self.exclude)
-
-        self.assertTrue(Path(
-            f"{self.directory.path}/Device Configurations/test_macOSCustomConfiguration.json").exists())
-        self.assertTrue(Path(
-            f"{self.directory.path}/Device Configurations/mobileconfig/test.mobileconfig").exists())
+        self.makeapirequest.return_value = {
+            "value": [
+                {
+                    "@odata.type": "#microsoft.graph.macOSCustomConfiguration",
+                    "id": "0",
+                    "displayName": "test",
+                    "payload": "SGkgdGhlcmUgcHJldHR5",
+                    "payloadFileName": "test.mobileconfig",
+                }
+            ]
+        }
+
+        self.count = savebackup(self.directory.path, "json", self.token, self.exclude)
+
+        self.assertTrue(Path(f"{self.directory.path}/Device Configurations/test_macOSCustomConfiguration.json").exists())
+        self.assertTrue(Path(f"{self.directory.path}/Device Configurations/mobileconfig/test.mobileconfig").exists())
         self.assertEqual(2, self.count)
 
     def test_backup_ios_custom_profile(self):
         """The folders and files should be created and the count should be 2."""
 
-        self.makeapirequest.return_value = {'value': [{
-            "@odata.type": '#microsoft.graph.iosCustomConfiguration',
-            "id": "0",
-            "displayName": "test",
-            "payload": "SGkgdGhlcmUgcHJldHR5",
-                       "payloadFileName": "test.mobileconfig"}]}
-
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.token,
-            self.exclude)
-
-        self.assertTrue(Path(
-            f"{self.directory.path}/Device Configurations/test_iosCustomConfiguration.json").exists())
-        self.assertTrue(Path(
-            f"{self.directory.path}/Device Configurations/mobileconfig/test.mobileconfig").exists())
+        self.makeapirequest.return_value = {
+            "value": [
+                {
+                    "@odata.type": "#microsoft.graph.iosCustomConfiguration",
+                    "id": "0",
+                    "displayName": "test",
+                    "payload": "SGkgdGhlcmUgcHJldHR5",
+                    "payloadFileName": "test.mobileconfig",
+                }
+            ]
+        }
+
+        self.count = savebackup(self.directory.path, "json", self.token, self.exclude)
+
+        self.assertTrue(Path(f"{self.directory.path}/Device Configurations/test_iosCustomConfiguration.json").exists())
+        self.assertTrue(Path(f"{self.directory.path}/Device Configurations/mobileconfig/test.mobileconfig").exists())
         self.assertEqual(2, self.count)
 
     def test_backup_windows_custom_profile_encrypted(self):
         """The file should be created and the count should be 1."""
 
-        self.profile = {'value': [{
-            "@odata.type": "#microsoft.graph.windows10CustomConfiguration",
-            "id": "0",
-            "displayName": "test",
-            "omaSettings": [{
-                "isEncrypted": True,
-                "@odata.type": "#microsoft.graph.windows10OmaSetting",
-                "secretReferenceValueId": "0",
-                "omaUri": "test uri",
-                "displayName": "test",
-                "description": "",
-                "value": []}]}]}
-        self.oma_values = {
-            '@odata.context': 'https://graph.microsoft.com/beta/$metadata#Edm.String',
-            'value': 'password'}
+        self.profile = {
+            "value": [
+                {
+                    "@odata.type": "#microsoft.graph.windows10CustomConfiguration",
+                    "id": "0",
+                    "displayName": "test",
+                    "omaSettings": [
+                        {
+                            "isEncrypted": True,
+                            "@odata.type": "#microsoft.graph.windows10OmaSetting",
+                            "secretReferenceValueId": "0",
+                            "omaUri": "test uri",
+                            "displayName": "test",
+                            "description": "",
+                            "value": [],
+                        }
+                    ],
+                }
+            ]
+        }
+        self.oma_values = {"@odata.context": "https://graph.microsoft.com/beta/$metadata#Edm.String", "value": "password"}
 
         self.makeapirequest.side_effect = self.profile, self.oma_values
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.token,
-            self.exclude)
+        self.count = savebackup(self.directory.path, "json", self.token, self.exclude)
 
-        self.assertTrue(Path(
-            f"{self.directory.path}/Device Configurations/test_windows10CustomConfiguration.json").exists())
+        self.assertTrue(Path(f"{self.directory.path}/Device Configurations/test_windows10CustomConfiguration.json").exists())
         self.assertEqual(1, self.count)
 
     def test_backup_windows_custom_profile_not_encrypted(self):
         """The file should be created and the count should be 1."""
 
-        self.profile = {'value': [{
-            "@odata.type": "#microsoft.graph.windows10CustomConfiguration",
-            "id": "0",
-            "displayName": "test",
-            "omaSettings": [{
-                "isEncrypted": False,
-                "@odata.type": "#microsoft.graph.windows10OmaSetting",
-                "secretReferenceValueId": "0",
-                "omaUri": "test uri",
-                "displayName": "test",
-                "description": "",
-                "value": []}]}]}
-        self.oma_values = {
-            '@odata.context': 'https://graph.microsoft.com/beta/$metadata#Edm.String',
-            'value': 'password'}
+        self.profile = {
+            "value": [
+                {
+                    "@odata.type": "#microsoft.graph.windows10CustomConfiguration",
+                    "id": "0",
+                    "displayName": "test",
+                    "omaSettings": [
+                        {
+                            "isEncrypted": False,
+                            "@odata.type": "#microsoft.graph.windows10OmaSetting",
+                            "secretReferenceValueId": "0",
+                            "omaUri": "test uri",
+                            "displayName": "test",
+                            "description": "",
+                            "value": [],
+                        }
+                    ],
+                }
+            ]
+        }
+        self.oma_values = {"@odata.context": "https://graph.microsoft.com/beta/$metadata#Edm.String", "value": "password"}
 
         self.makeapirequest.side_effect = self.profile, self.oma_values
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.token,
-            self.exclude)
+        self.count = savebackup(self.directory.path, "json", self.token, self.exclude)
 
-        self.assertTrue(Path(
-            f"{self.directory.path}/Device Configurations/test_windows10CustomConfiguration.json").exists())
+        self.assertTrue(Path(f"{self.directory.path}/Device Configurations/test_windows10CustomConfiguration.json").exists())
         self.assertEqual(1, self.count)
 
     def test_backup_non_custom_profile(self):
         """The file should be created and the count should be 1."""
 
-        self.makeapirequest.return_value = {'value': [{
-            "@odata.type": '#microsoft.graph.macOSGeneralDeviceConfiguration',
-            "id": "0",
-            "displayName": "test"}]}
+        self.makeapirequest.return_value = {
+            "value": [{"@odata.type": "#microsoft.graph.macOSGeneralDeviceConfiguration", "id": "0", "displayName": "test"}]
+        }
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.token,
-            self.exclude)
+        self.count = savebackup(self.directory.path, "json", self.token, self.exclude)
 
-        self.assertTrue(Path(
-            f"{self.directory.path}/Device Configurations/test_macOSGeneralDeviceConfiguration.json").exists())
+        self.assertTrue(
+            Path(f"{self.directory.path}/Device Configurations/test_macOSGeneralDeviceConfiguration.json").exists()
+        )
         self.assertEqual(1, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_remoteAssistancePartner.py b/tests/Backup/test_backup_remoteAssistancePartner.py
index 9ab718fc..1cfa550d 100644
--- a/tests/Backup/test_backup_remoteAssistancePartner.py
+++ b/tests/Backup/test_backup_remoteAssistancePartner.py
@@ -11,28 +11,20 @@
 from testfixtures import TempDirectory
 from src.IntuneCD.backup_remoteAssistancePartner import savebackup
 
-REMOTE_ASSISTANCE_PARTNER = {
-    "value": [{
-        "id": "0",
-        "onboardingStatus": "onboarded",
-        "displayName": "test"
-    }]}
+REMOTE_ASSISTANCE_PARTNER = {"value": [{"id": "0", "onboardingStatus": "onboarded", "displayName": "test"}]}
 
 
 @patch("src.IntuneCD.backup_remoteAssistancePartner.savebackup")
-@patch("src.IntuneCD.backup_remoteAssistancePartner.makeapirequest",
-       return_value=REMOTE_ASSISTANCE_PARTNER)
+@patch("src.IntuneCD.backup_remoteAssistancePartner.makeapirequest", return_value=REMOTE_ASSISTANCE_PARTNER)
 class TestBackupCompliancePartner(unittest.TestCase):
     """Test class for backup_remoteAssistancePartner."""
 
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.saved_path = f"{self.directory.path}/Partner Connections/Remote Assistance/test."
-        self.expected_data = {
-            "onboardingStatus": "onboarded",
-            "displayName": "test"}
+        self.expected_data = {"onboardingStatus": "onboarded", "displayName": "test"}
 
     def tearDown(self):
         self.directory.cleanup()
@@ -40,46 +32,42 @@ def tearDown(self):
     def test_backup_yml(self, mock_data, mock_makeapirequest):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'yaml', self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             self.saved_data = json.loads(data)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Partner Connections/Remote Assistance').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Partner Connections/Remote Assistance").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_json(self, mock_data, mock_makeapirequest):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             self.saved_data = json.load(f)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Partner Connections/Remote Assistance').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Partner Connections/Remote Assistance").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
-    def test_onboarding_status_not_onboarded(
-            self, mock_data, mock_makeapirequest):
+    def test_onboarding_status_not_onboarded(self, mock_data, mock_makeapirequest):
         """The count should be 0 if the onboarding status is not onboarded."""
 
-        mock_data.return_value = {
-            "value": [{"onboardingStatus": "notOnboarded"}]}
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        mock_data.return_value = {"value": [{"onboardingStatus": "notOnboarded"}]}
+        self.count = savebackup(self.directory.path, "json", self.token)
         self.assertEqual(0, self.count)
 
     def test_backup_with_no_return_data(self, mock_data, mock_makeapirequest):
         """The count should be 0 if no data is returned."""
 
         mock_data.return_value = {"value": []}
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_shellScripts.py b/tests/Backup/test_backup_shellScripts.py
index af9b3806..432ec617 100644
--- a/tests/Backup/test_backup_shellScripts.py
+++ b/tests/Backup/test_backup_shellScripts.py
@@ -10,17 +10,8 @@
 from testfixtures import TempDirectory
 from src.IntuneCD.backup_shellScripts import savebackup
 
-BATCH_ASSIGNMENT = [
-    {
-        'value': [
-            {
-                'id': '0',
-                'target': {
-                    'groupName': 'Group1'}}]}]
-OBJECT_ASSIGNMENT = [
-    {
-        'target': {
-            'groupName': 'Group1'}}]
+BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
+OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
 
 
 class TestBackupShellScript(unittest.TestCase):
@@ -29,44 +20,39 @@ class TestBackupShellScript(unittest.TestCase):
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.exclude = []
         self.saved_path = f"{self.directory.path}/Scripts/Shell/test."
         self.script_content_path = f"{self.directory.path}/Scripts/Shell/Script Data/test.ps1"
         self.expected_data = {
-            'assignments': [
-                {
-                    'target': {
-                        'groupName': 'Group1'}}],
-            'displayName': 'test',
-            'fileName': 'test',
-            'scriptContent': 'WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE='}
-        self.script_policy_data = {
-            "value": [{"id": "0", "displayName": "test"}]}
+            "assignments": [{"target": {"groupName": "Group1"}}],
+            "displayName": "test",
+            "fileName": "test",
+            "scriptContent": "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE=",
+        }
+        self.script_policy_data = {"value": [{"id": "0", "displayName": "test"}]}
         self.batch_request_data = [
             {
-                'id': '0',
-                'displayName': 'test',
-                'fileName': 'test',
-                'scriptContent': 'WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE='}]
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.backup_shellScripts.batch_assignment')
+                "id": "0",
+                "displayName": "test",
+                "fileName": "test",
+                "scriptContent": "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE=",
+            }
+        ]
+
+        self.batch_assignment_patch = patch("src.IntuneCD.backup_shellScripts.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.backup_shellScripts.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.backup_shellScripts.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
-        self.batch_request_patch = patch(
-            'src.IntuneCD.backup_shellScripts.batch_request')
+        self.batch_request_patch = patch("src.IntuneCD.backup_shellScripts.batch_request")
         self.batch_request = self.batch_request_patch.start()
         self.batch_request.return_value = self.batch_request_data
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.backup_shellScripts.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.backup_shellScripts.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.script_policy_data
 
@@ -80,47 +66,34 @@ def tearDown(self):
     def test_backup_yml(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'yaml',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.exclude, self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             self.saved_data = json.loads(data)
 
-        self.assertTrue(f'{self.directory.path}/Scripts/Shell')
+        self.assertTrue(f"{self.directory.path}/Scripts/Shell")
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_json(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             self.saved_data = json.load(f)
 
-        self.assertTrue(f'{self.directory.path}/Scripts/Shell')
+        self.assertTrue(f"{self.directory.path}/Scripts/Shell")
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_script_is_created(self):
         """The folder should be created and a .ps1 file should be created."""
 
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
-        self.assertTrue(
-            f'{self.directory.path}/Scripts/Shell/Script Data')
+        self.assertTrue(f"{self.directory.path}/Scripts/Shell/Script Data")
         self.assertTrue(self.script_content_path)
         self.assertEqual(1, self.count)
 
@@ -128,14 +101,10 @@ def test_backup_with_no_returned_data(self):
         """The count should be 0 if no data is returned."""
 
         self.batch_request.return_value = []
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_vppTokens.py b/tests/Backup/test_backup_vppTokens.py
index ef088ee2..d484324d 100644
--- a/tests/Backup/test_backup_vppTokens.py
+++ b/tests/Backup/test_backup_vppTokens.py
@@ -11,24 +11,18 @@
 from testfixtures import TempDirectory
 from src.IntuneCD.backup_vppTokens import savebackup
 
-VPP_TOKEN = {
-    "value": [{
-        "id": "0",
-        "tokenName": "test",
-        "displayName": "test"
-    }]}
+VPP_TOKEN = {"value": [{"id": "0", "tokenName": "test", "displayName": "test"}]}
 
 
 @patch("src.IntuneCD.backup_vppTokens.savebackup")
-@patch("src.IntuneCD.backup_vppTokens.makeapirequest",
-       return_value=VPP_TOKEN)
+@patch("src.IntuneCD.backup_vppTokens.makeapirequest", return_value=VPP_TOKEN)
 class TestBackupVPPTokens(unittest.TestCase):
     """Test class for backup_vppTokens."""
 
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.saved_path = f"{self.directory.path}/Apple VPP Tokens/test."
         self.expected_data = {"tokenName": "test", "displayName": "test"}
 
@@ -38,27 +32,25 @@ def tearDown(self):
     def test_backup_yml(self, mock_data, mock_makeapirequest):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'yaml', self.token)
+        self.count = savebackup(self.directory.path, "yaml", self.token)
 
-        with open(self.saved_path + 'yaml', 'r') as f:
+        with open(self.saved_path + "yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             self.saved_data = json.loads(data)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Apple VPP Tokens').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Apple VPP Tokens").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
     def test_backup_json(self, mock_data, mock_makeapirequest):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
 
-        with open(self.saved_path + 'json', 'r') as f:
+        with open(self.saved_path + "json", "r") as f:
             self.saved_data = json.load(f)
 
-        self.assertTrue(
-            Path(f'{self.directory.path}/Apple VPP Tokens').exists())
+        self.assertTrue(Path(f"{self.directory.path}/Apple VPP Tokens").exists())
         self.assertEqual(self.expected_data, self.saved_data)
         self.assertEqual(1, self.count)
 
@@ -66,9 +58,9 @@ def test_backup_with_no_return_data(self, mock_data, mock_makeapirequest):
         """The count should be 0 if no data is returned."""
 
         mock_data.return_value = {"value": []}
-        self.count = savebackup(self.directory.path, 'json', self.token)
+        self.count = savebackup(self.directory.path, "json", self.token)
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Backup/test_backup_windowsEnrollmentProfile.py b/tests/Backup/test_backup_windowsEnrollmentProfile.py
index aeaa6e53..5c6fa386 100644
--- a/tests/Backup/test_backup_windowsEnrollmentProfile.py
+++ b/tests/Backup/test_backup_windowsEnrollmentProfile.py
@@ -10,16 +10,8 @@
 from testfixtures import TempDirectory
 from src.IntuneCD.backup_windowsEnrollmentProfile import savebackup
 
-BATCH_ASSIGNMENT = [
-    {
-        'value': [
-            {
-                'id': '0',
-                'target': {'groupName': 'Group1'}}]}]
-OBJECT_ASSIGNMENT = [
-    {
-        'target': {
-            'groupName': 'Group1'}}]
+BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
+OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
 
 
 class TestBackupWindowsEnrollmentProfile(unittest.TestCase):
@@ -28,28 +20,21 @@ class TestBackupWindowsEnrollmentProfile(unittest.TestCase):
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
-        self.token = 'token'
+        self.token = "token"
         self.exclude = []
         self.saved_path = f"{self.directory.path}/Enrollment Profiles/Windows/test."
-        self.expected_data = {'assignments': [{'target': {'groupName': 'Group1'}}], 'displayName': 'test'}
-        self.enrollment_profile = {
-            "value": [{
-                "displayName": "test",
-                "id": "0"
-            }]}
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.backup_windowsEnrollmentProfile.batch_assignment')
+        self.expected_data = {"assignments": [{"target": {"groupName": "Group1"}}], "displayName": "test"}
+        self.enrollment_profile = {"value": [{"displayName": "test", "id": "0"}]}
+
+        self.batch_assignment_patch = patch("src.IntuneCD.backup_windowsEnrollmentProfile.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.backup_windowsEnrollmentProfile.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.backup_windowsEnrollmentProfile.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.backup_windowsEnrollmentProfile.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.backup_windowsEnrollmentProfile.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.enrollment_profile
 
@@ -62,50 +47,38 @@ def tearDown(self):
     def test_backup_yml(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        output = 'yaml'
-        count = savebackup(
-            self.directory.path,
-            output,
-            self.exclude,
-            self.token)
+        output = "yaml"
+        count = savebackup(self.directory.path, output, self.exclude, self.token)
 
-        with open(self.saved_path + output, 'r') as f:
+        with open(self.saved_path + output, "r") as f:
             data = json.dumps(yaml.safe_load(f))
             saved_data = json.loads(data)
 
-        self.assertTrue(f'{self.directory.path}/Enrollment Profiles/Windows')
+        self.assertTrue(f"{self.directory.path}/Enrollment Profiles/Windows")
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, count)
 
     def test_backup_json(self):
         """The folder should be created, the file should have the expected contents, and the count should be 1."""
 
-        output = 'json'
-        count = savebackup(
-            self.directory.path,
-            output,
-            self.exclude,
-            self.token)
+        output = "json"
+        count = savebackup(self.directory.path, output, self.exclude, self.token)
 
-        with open(self.saved_path + output, 'r') as f:
+        with open(self.saved_path + output, "r") as f:
             saved_data = json.load(f)
 
-        self.assertTrue(f'{self.directory.path}/Enrollment Profiles/Windows')
+        self.assertTrue(f"{self.directory.path}/Enrollment Profiles/Windows")
         self.assertEqual(self.expected_data, saved_data)
         self.assertEqual(1, count)
 
     def test_backup_with_no_returned_data(self):
         """The count should be 0 if no data is returned."""
 
-        self.makeapirequest.return_value = {'value': []}
-        self.count = savebackup(
-            self.directory.path,
-            'json',
-            self.exclude,
-            self.token)
+        self.makeapirequest.return_value = {"value": []}
+        self.count = savebackup(self.directory.path, "json", self.exclude, self.token)
 
         self.assertEqual(0, self.count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Update/test_update_ManagementIntents.py b/tests/Update/test_update_ManagementIntents.py
index 9e8ed229..18894775 100644
--- a/tests/Update/test_update_ManagementIntents.py
+++ b/tests/Update/test_update_ManagementIntents.py
@@ -16,73 +16,58 @@ def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
         self.directory.makedir("Management Intents")
-        self.directory.write(
-            "Management Intents/macOS Firewall/test.json", '{"test": "test"}',
-            encoding='utf-8')
-        self.token = 'token'
-        self.mem_data = {"value": [{"@odata.type": "test",
-                                    "id": "0",
-                                    "displayName": "test",
-                                    "assignments": [{"target": {"groupId": "test"}}]}]}
+        self.directory.write("Management Intents/macOS Firewall/test.json", '{"test": "test"}', encoding="utf-8")
+        self.token = "token"
+        self.mem_data = {
+            "value": [
+                {"@odata.type": "test", "id": "0", "displayName": "test", "assignments": [{"target": {"groupId": "test"}}]}
+            ]
+        }
         self.repo_data = {
             "id": "0",
             "displayName": "test",
             "description": "Hi there",
             "templateId": "0",
-            "settingsDelta": [
-                {
-                    "@odata.type": "#test.test",
-                    "definitionId": "test_test",
-                    "value": False
-                }],
-            "assignments": [{"target": {"groupName": "test1"}}]}
-        self.batch_intent_data = {"value": [{
-            "id": "0",
-            "displayName": "test",
-            "description": "Hi there",
-            "templateId": "0",
-            "settingsDelta": [
+            "settingsDelta": [{"@odata.type": "#test.test", "definitionId": "test_test", "value": False}],
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
+        self.batch_intent_data = {
+            "value": [
                 {
                     "id": "0",
-                    "@odata.type": "#test.test",
-                    "definitionId": "test_test",
-                    "value": True
-                }]
-        }]}
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.update_managementIntents.batch_assignment')
+                    "displayName": "test",
+                    "description": "Hi there",
+                    "templateId": "0",
+                    "settingsDelta": [{"id": "0", "@odata.type": "#test.test", "definitionId": "test_test", "value": True}],
+                }
+            ]
+        }
+
+        self.batch_assignment_patch = patch("src.IntuneCD.update_managementIntents.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
 
-        self.batch_intents_patch = patch(
-            'src.IntuneCD.update_managementIntents.batch_intents')
+        self.batch_intents_patch = patch("src.IntuneCD.update_managementIntents.batch_intents")
         self.batch_intents = self.batch_intents_patch.start()
         self.batch_intents.return_value = self.batch_intent_data
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.update_managementIntents.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.update_managementIntents.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.update_managementIntents.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.update_managementIntents.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
-        self.update_assignment_patch = patch(
-            'src.IntuneCD.update_managementIntents.update_assignment')
+        self.update_assignment_patch = patch("src.IntuneCD.update_managementIntents.update_assignment")
         self.update_assignment = self.update_assignment_patch.start()
 
-        self.load_file_patch = patch(
-            'src.IntuneCD.update_managementIntents.load_file')
+        self.load_file_patch = patch("src.IntuneCD.update_managementIntents.load_file")
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
-        self.post_assignment_update_patch = patch(
-            'src.IntuneCD.update_managementIntents.post_assignment_update')
+        self.post_assignment_update_patch = patch("src.IntuneCD.update_managementIntents.post_assignment_update")
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
-        self.makeapirequestPost_patch = patch(
-            'src.IntuneCD.update_managementIntents.makeapirequestPost')
+        self.makeapirequestPost_patch = patch("src.IntuneCD.update_managementIntents.makeapirequestPost")
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
@@ -102,7 +87,7 @@ def test_update_with_diffs_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPost.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -111,29 +96,29 @@ def test_update_with_diffs_no_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPost.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_with_no_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update should be called,
-         and makeapirequestPost should not be called."""
-        self.batch_intent_data["value"][0]["settingsDelta"][0]['value'] = False
+        and makeapirequestPost should not be called."""
+        self.batch_intent_data["value"][0]["settingsDelta"][0]["value"] = False
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPost.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_with_no_diffs_no_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPost should not be called."""
 
-        self.batch_intent_data["value"][0]["settingsDelta"][0]['value'] = False
+        self.batch_intent_data["value"][0]["settingsDelta"][0]["value"] = False
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPost.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
@@ -145,10 +130,10 @@ def test_update_config_not_found_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count, [])
         self.assertEqual(self.makeapirequestPost.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Update/test_update_appConfiguration.py b/tests/Update/test_update_appConfiguration.py
index 460d6b4d..ab2f6ab7 100644
--- a/tests/Update/test_update_appConfiguration.py
+++ b/tests/Update/test_update_appConfiguration.py
@@ -16,58 +16,53 @@ def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
         self.directory.makedir("App Configuration")
-        self.directory.write(
-            "App Configuration/test.json", '{"test": "test"}',
-            encoding='utf-8')
-        self.directory.write(
-            "App Configuration/test.txt", 'txt',
-            encoding='utf-8')
-        self.token = 'token'
-        self.mem_data = {"value": [{"@odata.type": "test",
-                                    "id": "0",
-                                    "displayName": "test",
-                                    "testvalue": "test",
-                                    "assignments": [{"target": {"groupId": "test"}}]}]}
-        self.repo_data = {"@odata.type": "test",
-                          "id": "0",
-                          "displayName": "test",
-                          "testvalue": "test1",
-                          "targetedMobileApps": {"appName": "test",
-                                                 "type": "#test.test.test"},
-                          "assignments": [{"target": {"groupName": "test1"}}]}
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.update_appConfiguration.batch_assignment')
+        self.directory.write("App Configuration/test.json", '{"test": "test"}', encoding="utf-8")
+        self.directory.write("App Configuration/test.txt", "txt", encoding="utf-8")
+        self.token = "token"
+        self.mem_data = {
+            "value": [
+                {
+                    "@odata.type": "test",
+                    "id": "0",
+                    "displayName": "test",
+                    "testvalue": "test",
+                    "assignments": [{"target": {"groupId": "test"}}],
+                }
+            ]
+        }
+        self.repo_data = {
+            "@odata.type": "test",
+            "id": "0",
+            "displayName": "test",
+            "testvalue": "test1",
+            "targetedMobileApps": {"appName": "test", "type": "#test.test.test"},
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
+
+        self.batch_assignment_patch = patch("src.IntuneCD.update_appConfiguration.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.update_appConfiguration.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.update_appConfiguration.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.update_appConfiguration.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.update_appConfiguration.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
-        self.update_assignment_patch = patch(
-            'src.IntuneCD.update_appConfiguration.update_assignment')
+        self.update_assignment_patch = patch("src.IntuneCD.update_appConfiguration.update_assignment")
         self.update_assignment = self.update_assignment_patch.start()
 
-        self.load_file_patch = patch(
-            'src.IntuneCD.update_appConfiguration.load_file')
+        self.load_file_patch = patch("src.IntuneCD.update_appConfiguration.load_file")
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
-        self.post_assignment_update_patch = patch(
-            'src.IntuneCD.update_appConfiguration.post_assignment_update')
+        self.post_assignment_update_patch = patch("src.IntuneCD.update_appConfiguration.post_assignment_update")
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
-        self.makeapirequestPatch_patch = patch(
-            'src.IntuneCD.update_appConfiguration.makeapirequestPatch')
+        self.makeapirequestPatch_patch = patch("src.IntuneCD.update_appConfiguration.makeapirequestPatch")
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
-        self.makeapirequestPost_patch = patch(
-            'src.IntuneCD.update_appConfiguration.makeapirequestPost')
+        self.makeapirequestPost_patch = patch("src.IntuneCD.update_appConfiguration.makeapirequestPost")
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
@@ -87,7 +82,7 @@ def test_update_with_diffs_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -96,19 +91,19 @@ def test_update_with_diffs_no_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_with_no_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update should be called,
-         and makeapirequestPatch should not be called."""
+        and makeapirequestPatch should not be called."""
 
         self.mem_data["value"][0]["testvalue"] = "test1"
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -119,7 +114,7 @@ def test_update_with_no_diffs_no_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
@@ -130,7 +125,7 @@ def test_update_config_not_found_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count, [])
         self.assertEqual(self.makeapirequestPost.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -142,10 +137,10 @@ def test_update_config_not_found_and_app_not_found(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count, [])
         self.assertEqual(self.makeapirequestPost.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Update/test_update_appProtection.py b/tests/Update/test_update_appProtection.py
index dabb9f4e..3067df9c 100644
--- a/tests/Update/test_update_appProtection.py
+++ b/tests/Update/test_update_appProtection.py
@@ -9,18 +9,9 @@
 from src.IntuneCD.update_appProtection import update
 
 
-BATCH_ASSIGNMENT = [
-    {
-        'value': [
-            {
-                'id': '0',
-                'target': {
-                    'groupName': 'test1'}}]}]
-
-OBJECT_ASSIGNMENT = [
-    {
-        'target': {
-            'groupName': 'test'}}]
+BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "test1"}}]}]
+
+OBJECT_ASSIGNMENT = [{"target": {"groupName": "test"}}]
 
 UPDATE_ASSIGNMENT = {"assignments": [{"target": {"groupName": "test1"}}]}
 
@@ -32,26 +23,19 @@ def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
         self.directory.makedir("App Protection")
-        self.directory.write(
-            "App Protection/test.json", '{"test": "test"}',
-            encoding='utf-8')
-        self.directory.write(
-            "App Protection/test.txt", 'txt',
-            encoding='utf-8')
-        self.token = 'token'
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.update_appProtection.batch_assignment')
+        self.directory.write("App Protection/test.json", '{"test": "test"}', encoding="utf-8")
+        self.directory.write("App Protection/test.txt", "txt", encoding="utf-8")
+        self.token = "token"
+
+        self.batch_assignment_patch = patch("src.IntuneCD.update_appProtection.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.update_appProtection.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.update_appProtection.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.update_appProtection.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.update_appProtection.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = {
             "value": [
@@ -61,18 +45,16 @@ def setUp(self):
                     "displayName": "test",
                     "testvalue": "test",
                     "targetedAppManagementLevels": "test",
-                    "assignments": [
-                        {
-                            "target": {
-                                "groupId": "test"}}]}]}
+                    "assignments": [{"target": {"groupId": "test"}}],
+                }
+            ]
+        }
 
-        self.update_assignment_patch = patch(
-            'src.IntuneCD.update_appProtection.update_assignment')
+        self.update_assignment_patch = patch("src.IntuneCD.update_appProtection.update_assignment")
         self.update_assignment = self.update_assignment_patch.start()
         self.update_assignment.return_value = UPDATE_ASSIGNMENT
 
-        self.load_file_patch = patch(
-            'src.IntuneCD.update_appProtection.load_file')
+        self.load_file_patch = patch("src.IntuneCD.update_appProtection.load_file")
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = {
             "@odata.type": "#test.test.test",
@@ -80,21 +62,16 @@ def setUp(self):
             "displayName": "test",
             "targetedAppManagementLevels": "test",
             "testvalue": "test1",
-            "assignments": [
-                {
-                    "target": {
-                        "groupName": "test1"}}]}
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
 
-        self.post_assignment_update_patch = patch(
-            'src.IntuneCD.update_appProtection.post_assignment_update')
+        self.post_assignment_update_patch = patch("src.IntuneCD.update_appProtection.post_assignment_update")
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
-        self.makeapirequestPatch_patch = patch(
-            'src.IntuneCD.update_appProtection.makeapirequestPatch')
+        self.makeapirequestPatch_patch = patch("src.IntuneCD.update_appProtection.makeapirequestPatch")
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
-        self.makeapirequestPost_patch = patch(
-            'src.IntuneCD.update_appProtection.makeapirequestPost')
+        self.makeapirequestPost_patch = patch("src.IntuneCD.update_appProtection.makeapirequestPost")
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
@@ -114,7 +91,7 @@ def test_update_with_diffs_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -123,27 +100,25 @@ def test_update_with_diffs_no_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_with_no_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update should be called,
-         and makeapirequestPatch should not be called."""
+        and makeapirequestPatch should not be called."""
 
         self.load_file.return_value = {
             "@odata.type": "#test.test.test",
             "id": "0",
             "displayName": "test",
             "testvalue": "test",
-            "assignments": [
-                {
-                    "target": {
-                        "groupName": "test1"}}]}
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -155,253 +130,250 @@ def test_update_with_no_diffs_no_assignment(self):
             "id": "0",
             "displayName": "test",
             "testvalue": "test",
-            "assignments": [
-                {
-                    "target": {
-                        "groupName": "test1"}}]}
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_mdmWindowsInformationProtectionPolicy_with_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPatch should not be called."""
 
-        self.makeapirequest.return_value = {"value": [{
-            "@odata.type": "#microsoft.graph.mdmWindowsInformationProtectionPolicy",
-            "id": "0",
-            "displayName": "test",
-            "testvalue": "test",
-            "assignments": [
+        self.makeapirequest.return_value = {
+            "value": [
                 {
-                    "target": {
-                        "groupName": "test1"}}]}]}
+                    "@odata.type": "#microsoft.graph.mdmWindowsInformationProtectionPolicy",
+                    "id": "0",
+                    "displayName": "test",
+                    "testvalue": "test",
+                    "assignments": [{"target": {"groupName": "test1"}}],
+                }
+            ]
+        }
         self.load_file.return_value = {
             "@odata.type": "#microsoft.graph.mdmWindowsInformationProtectionPolicy",
             "id": "0",
             "displayName": "test",
             "testvalue": "test1",
-            "assignments": [
-                {
-                    "target": {
-                        "groupName": "test1"}}]}
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_mdmWindowsInformationProtectionPolicy_with_diffs_no_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPatch should not be called."""
 
-        self.makeapirequest.return_value = {"value": [{
-            "@odata.type": "#microsoft.graph.mdmWindowsInformationProtectionPolicy",
-            "id": "0",
-            "displayName": "test",
-            "testvalue": "test",
-            "assignments": [
+        self.makeapirequest.return_value = {
+            "value": [
                 {
-                    "target": {
-                        "groupName": "test1"}}]}]}
+                    "@odata.type": "#microsoft.graph.mdmWindowsInformationProtectionPolicy",
+                    "id": "0",
+                    "displayName": "test",
+                    "testvalue": "test",
+                    "assignments": [{"target": {"groupName": "test1"}}],
+                }
+            ]
+        }
         self.load_file.return_value = {
             "@odata.type": "#microsoft.graph.mdmWindowsInformationProtectionPolicy",
             "id": "0",
             "displayName": "test",
             "testvalue": "test1",
-            "assignments": [
-                {
-                    "target": {
-                        "groupName": "test1"}}]}
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_mdmWindowsInformationProtectionPolicy_with_no_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPatch should not be called."""
 
-        self.makeapirequest.return_value = {"value": [{
-            "@odata.type": "#microsoft.graph.mdmWindowsInformationProtectionPolicy",
-            "id": "0",
-            "displayName": "test",
-            "testvalue": "test",
-            "assignments": [
+        self.makeapirequest.return_value = {
+            "value": [
                 {
-                    "target": {
-                        "groupName": "test1"}}]}]}
+                    "@odata.type": "#microsoft.graph.mdmWindowsInformationProtectionPolicy",
+                    "id": "0",
+                    "displayName": "test",
+                    "testvalue": "test",
+                    "assignments": [{"target": {"groupName": "test1"}}],
+                }
+            ]
+        }
         self.load_file.return_value = {
             "@odata.type": "#microsoft.graph.mdmWindowsInformationProtectionPolicy",
             "id": "0",
             "displayName": "test",
             "testvalue": "test",
-            "assignments": [
-                {
-                    "target": {
-                        "groupName": "test1"}}]}
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_mdmWindowsInformationProtectionPolicy_with_no_diffs_no_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPatch should not be called."""
 
-        self.makeapirequest.return_value = {"value": [{
-            "@odata.type": "#microsoft.graph.mdmWindowsInformationProtectionPolicy",
-            "id": "0",
-            "displayName": "test",
-            "testvalue": "test",
-            "assignments": [
+        self.makeapirequest.return_value = {
+            "value": [
                 {
-                    "target": {
-                        "groupName": "test1"}}]}]}
+                    "@odata.type": "#microsoft.graph.mdmWindowsInformationProtectionPolicy",
+                    "id": "0",
+                    "displayName": "test",
+                    "testvalue": "test",
+                    "assignments": [{"target": {"groupName": "test1"}}],
+                }
+            ]
+        }
         self.load_file.return_value = {
             "@odata.type": "#microsoft.graph.mdmWindowsInformationProtectionPolicy",
             "id": "0",
             "displayName": "test",
             "testvalue": "test",
-            "assignments": [
-                {
-                    "target": {
-                        "groupName": "test1"}}]}
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_windowsInformationProtectionPolicy_with_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPatch should not be called."""
 
-        self.makeapirequest.return_value = {"value": [{
-            "@odata.type": "#microsoft.graph.windowsInformationProtectionPolicy",
-            "id": "0",
-            "displayName": "test",
-            "testvalue": "test",
-            "assignments": [
+        self.makeapirequest.return_value = {
+            "value": [
                 {
-                    "target": {
-                        "groupName": "test1"}}]}]}
+                    "@odata.type": "#microsoft.graph.windowsInformationProtectionPolicy",
+                    "id": "0",
+                    "displayName": "test",
+                    "testvalue": "test",
+                    "assignments": [{"target": {"groupName": "test1"}}],
+                }
+            ]
+        }
         self.load_file.return_value = {
             "@odata.type": "#microsoft.graph.windowsInformationProtectionPolicy",
             "id": "0",
             "displayName": "test",
             "testvalue": "test1",
-            "assignments": [
-                {
-                    "target": {
-                        "groupName": "test1"}}]}
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_windowsInformationProtectionPolicy_with_diffs_no_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPatch should not be called."""
 
-        self.makeapirequest.return_value = {"value": [{
-            "@odata.type": "#microsoft.graph.windowsInformationProtectionPolicy",
-            "id": "0",
-            "displayName": "test",
-            "testvalue": "test",
-            "assignments": [
+        self.makeapirequest.return_value = {
+            "value": [
                 {
-                    "target": {
-                        "groupName": "test1"}}]}]}
+                    "@odata.type": "#microsoft.graph.windowsInformationProtectionPolicy",
+                    "id": "0",
+                    "displayName": "test",
+                    "testvalue": "test",
+                    "assignments": [{"target": {"groupName": "test1"}}],
+                }
+            ]
+        }
         self.load_file.return_value = {
             "@odata.type": "#microsoft.graph.windowsInformationProtectionPolicy",
             "id": "0",
             "displayName": "test",
             "testvalue": "test1",
-            "assignments": [
-                {
-                    "target": {
-                        "groupName": "test1"}}]}
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_windowsInformationProtectionPolicy_with_no_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPatch should not be called."""
 
-        self.makeapirequest.return_value = {"value": [{
-            "@odata.type": "#microsoft.graph.windowsInformationProtectionPolicy",
-            "id": "0",
-            "displayName": "test",
-            "testvalue": "test",
-            "assignments": [
+        self.makeapirequest.return_value = {
+            "value": [
                 {
-                    "target": {
-                        "groupName": "test1"}}]}]}
+                    "@odata.type": "#microsoft.graph.windowsInformationProtectionPolicy",
+                    "id": "0",
+                    "displayName": "test",
+                    "testvalue": "test",
+                    "assignments": [{"target": {"groupName": "test1"}}],
+                }
+            ]
+        }
         self.load_file.return_value = {
             "@odata.type": "#microsoft.graph.windowsInformationProtectionPolicy",
             "id": "0",
             "displayName": "test",
             "testvalue": "test",
-            "assignments": [
-                {
-                    "target": {
-                        "groupName": "test1"}}]}
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_windowsInformationProtectionPolicy_with_no_diffs_no_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPatch should not be called."""
 
-        self.makeapirequest.return_value = {"value": [{
-            "@odata.type": "#microsoft.graph.windowsInformationProtectionPolicy",
-            "id": "0",
-            "displayName": "test",
-            "testvalue": "test",
-            "assignments": [
+        self.makeapirequest.return_value = {
+            "value": [
                 {
-                    "target": {
-                        "groupName": "test1"}}]}]}
+                    "@odata.type": "#microsoft.graph.windowsInformationProtectionPolicy",
+                    "id": "0",
+                    "displayName": "test",
+                    "testvalue": "test",
+                    "assignments": [{"target": {"groupName": "test1"}}],
+                }
+            ]
+        }
         self.load_file.return_value = {
             "@odata.type": "#microsoft.graph.windowsInformationProtectionPolicy",
             "id": "0",
             "displayName": "test",
             "testvalue": "test",
-            "assignments": [
-                {
-                    "target": {
-                        "groupName": "test1"}}]}
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_config_not_found_and_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPost should be called."""
 
-        self.makeapirequest.return_value = {"value": [
-            {"@odata.type": "#test.test.test", "id": "0", "displayName": "test1"}]}
+        self.makeapirequest.return_value = {"value": [{"@odata.type": "#test.test.test", "id": "0", "displayName": "test1"}]}
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count, [])
         self.assertEqual(self.makeapirequestPost.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Update/test_update_appleEnrollmentProfile.py b/tests/Update/test_update_appleEnrollmentProfile.py
index a26f0f4e..6be78101 100644
--- a/tests/Update/test_update_appleEnrollmentProfile.py
+++ b/tests/Update/test_update_appleEnrollmentProfile.py
@@ -16,34 +16,21 @@ def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
         self.directory.makedir("Enrollment Profiles/Apple")
-        self.directory.write(
-            "Enrollment Profiles/Apple/test.json", '{"test": "test"}',
-            encoding='utf-8')
-        self.directory.write(
-            "Enrollment Profiles/Apple/test.txt", '{"test": "test"}',
-            encoding='utf-8')
-        self.token = 'token'
-        self.mem_data = {"value": [{"@odata.type": "test",
-                                    "id": "0",
-                                    "displayName": "test",
-                                    "testvalue": "test"}]}
-        self.repo_data = {"@odata.type": "test",
-                          "id": "0",
-                          "displayName": "test",
-                          "testvalue": "test1"}
-
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.update_appleEnrollmentProfile.makeapirequest')
+        self.directory.write("Enrollment Profiles/Apple/test.json", '{"test": "test"}', encoding="utf-8")
+        self.directory.write("Enrollment Profiles/Apple/test.txt", '{"test": "test"}', encoding="utf-8")
+        self.token = "token"
+        self.mem_data = {"value": [{"@odata.type": "test", "id": "0", "displayName": "test", "testvalue": "test"}]}
+        self.repo_data = {"@odata.type": "test", "id": "0", "displayName": "test", "testvalue": "test1"}
+
+        self.makeapirequest_patch = patch("src.IntuneCD.update_appleEnrollmentProfile.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
-        self.load_file_patch = patch(
-            'src.IntuneCD.update_appleEnrollmentProfile.load_file')
+        self.load_file_patch = patch("src.IntuneCD.update_appleEnrollmentProfile.load_file")
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
-        self.makeapirequestPatch_patch = patch(
-            'src.IntuneCD.update_appleEnrollmentProfile.makeapirequestPatch')
+        self.makeapirequestPatch_patch = patch("src.IntuneCD.update_appleEnrollmentProfile.makeapirequestPatch")
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
     def tearDown(self):
@@ -55,32 +42,32 @@ def tearDown(self):
     def test_update_with_diffs(self):
         """The count should be 1 and makeapirequestPatch should be called."""
 
-        self.count = update(self.directory.path, self.token)
+        self.count = update(self.directory.path, self.token, report=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
 
     def test_update_with_multiple_diffs(self):
         """The count should be 1 and makeapirequestPatch should be called."""
 
-        self.repo_data['testvalue2'] = 'test2'
-        self.mem_data['value'][0]['testvalue'] = 'test'
-        self.mem_data['value'][0]['testvalue2'] = 'test1'
+        self.repo_data["testvalue2"] = "test2"
+        self.mem_data["value"][0]["testvalue"] = "test"
+        self.mem_data["value"][0]["testvalue2"] = "test1"
 
-        self.count = update(self.directory.path, self.token)
+        self.count = update(self.directory.path, self.token, report=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 2)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
 
     def test_update_with_no_diffs(self):
         """The count should be 0 and makeapirequestPatch should not be called."""
 
-        self.mem_data['value'][0]['testvalue'] = 'test1'
-        self.count = update(self.directory.path, self.token)
+        self.mem_data["value"][0]["testvalue"] = "test1"
+        self.count = update(self.directory.path, self.token, report=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Update/test_update_assignment.py b/tests/Update/test_update_assignment.py
index f55232a6..96eb6b82 100644
--- a/tests/Update/test_update_assignment.py
+++ b/tests/Update/test_update_assignment.py
@@ -8,31 +8,35 @@ class TestUpdateAssignment(unittest.TestCase):
     """Test class for update_assignment."""
 
     def setUp(self):
-        self.token = 'token'
+        self.token = "token"
         self.output_data = {
-            'assignments': {
-                'intent': 'apply',
-                'target': {
-                    '@odata.type': '#microsoft.graph.allDevicesAssignmentTarget',
-                    'deviceAndAppManagementAssignmentFilterId': "1234",
-                    'deviceAndAppManagementAssignmentFilterType': 'device'}}}
+            "assignments": {
+                "intent": "apply",
+                "target": {
+                    "@odata.type": "#microsoft.graph.allDevicesAssignmentTarget",
+                    "deviceAndAppManagementAssignmentFilterId": "1234",
+                    "deviceAndAppManagementAssignmentFilterType": "device",
+                },
+            }
+        }
         self.mem_data = []
         self.repo_data = [
             {
-                'source': 'direct',
-                'intent': 'apply',
-                'target': {
-                    '@odata.type': '#microsoft.graph.groupAssignmentTarget',
-                    'deviceAndAppManagementAssignmentFilterId': 'test',
-                    'deviceAndAppManagementAssignmentFilterType': 'device',
-                    'groupName': 'test'}}]
-        self.request_data = {'value': [{'id': '12345', 'displayName': 'test'}]}
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.update_assignment.makeapirequest')
+                "source": "direct",
+                "intent": "apply",
+                "target": {
+                    "@odata.type": "#microsoft.graph.groupAssignmentTarget",
+                    "deviceAndAppManagementAssignmentFilterId": "test",
+                    "deviceAndAppManagementAssignmentFilterType": "device",
+                    "groupName": "test",
+                },
+            }
+        ]
+        self.request_data = {"value": [{"id": "12345", "displayName": "test"}]}
+        self.makeapirequest_patch = patch("src.IntuneCD.update_assignment.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
 
-        self.makeapirequestPost_patch = patch(
-            'src.IntuneCD.update_assignment.makeapirequestPost')
+        self.makeapirequestPost_patch = patch("src.IntuneCD.update_assignment.makeapirequestPost")
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
 
     def tearDown(self):
@@ -43,23 +47,28 @@ def test_get_added_removed(self):
         """The list of added and removed should be returned."""
         result = get_added_removed(self.output_data)
 
-        self.assertEqual(
-            result,
-            ['intent: apply, Filter ID: 1234, Filter Type: device, target: All Devices'])
+        self.assertEqual(result, ["intent: apply, Filter ID: 1234, Filter Type: device, target: All Devices"])
 
     def test_update_assignment(self):
 
         self.makeapirequest.return_value = self.request_data
 
-        result = update_assignment(
-            self.repo_data, self.mem_data, self.token)
+        result = update_assignment(self.repo_data, self.mem_data, self.token)
 
-        self.assertEqual(result,
-                         [{'source': 'direct',
-                           'intent': 'apply',
-                           'target': {'@odata.type': '#microsoft.graph.groupAssignmentTarget',
-                                      'deviceAndAppManagementAssignmentFilterId': '12345',
-                                      'deviceAndAppManagementAssignmentFilterType': 'device',
-                                      'groupId': '12345'}}])
+        self.assertEqual(
+            result,
+            [
+                {
+                    "source": "direct",
+                    "intent": "apply",
+                    "target": {
+                        "@odata.type": "#microsoft.graph.groupAssignmentTarget",
+                        "deviceAndAppManagementAssignmentFilterId": "12345",
+                        "deviceAndAppManagementAssignmentFilterType": "device",
+                        "groupId": "12345",
+                    },
+                }
+            ],
+        )
 
         self.assertEqual(self.makeapirequest.call_count, 2)
diff --git a/tests/Update/test_update_assignmentFilter.py b/tests/Update/test_update_assignmentFilter.py
index 142e1ab2..cb587c44 100644
--- a/tests/Update/test_update_assignmentFilter.py
+++ b/tests/Update/test_update_assignmentFilter.py
@@ -12,40 +12,26 @@ def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
         self.directory.makedir("Filters")
-        self.directory.write(
-            "Filters/test.json", '{"test": "test"}',
-            encoding='utf-8')
-        self.directory.write(
-            "Filters/test.txt", '{"test": "test"}',
-            encoding='utf-8')
-        self.token = 'token'
-        self.mem_data = {"value": [{"@odata.type": "test",
-                                    "id": "0",
-                                    "displayName": "test",
-                                    "testvalue": "test"}]}
-        self.repo_data = {"@odata.type": "test",
-                          "id": "0",
-                          "displayName": "test",
-                          "testvalue": "test1"}
-
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.update_assignmentFilter.makeapirequest')
+        self.directory.write("Filters/test.json", '{"test": "test"}', encoding="utf-8")
+        self.directory.write("Filters/test.txt", '{"test": "test"}', encoding="utf-8")
+        self.token = "token"
+        self.mem_data = {"value": [{"@odata.type": "test", "id": "0", "displayName": "test", "testvalue": "test"}]}
+        self.repo_data = {"@odata.type": "test", "id": "0", "displayName": "test", "testvalue": "test1"}
+
+        self.makeapirequest_patch = patch("src.IntuneCD.update_assignmentFilter.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
-        self.load_file_patch = patch(
-            'src.IntuneCD.update_assignmentFilter.load_file')
+        self.load_file_patch = patch("src.IntuneCD.update_assignmentFilter.load_file")
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
-        self.makeapirequestPatch_patch = patch(
-            'src.IntuneCD.update_assignmentFilter.makeapirequestPatch')
+        self.makeapirequestPatch_patch = patch("src.IntuneCD.update_assignmentFilter.makeapirequestPatch")
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
-        self.makeapirequestPost_patch = patch(
-            'src.IntuneCD.update_assignmentFilter.makeapirequestPost')
+        self.makeapirequestPost_patch = patch("src.IntuneCD.update_assignmentFilter.makeapirequestPost")
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
-        self.makeapirequestPost.return_value = {'id': '0'}
+        self.makeapirequestPost.return_value = {"id": "0"}
 
     def tearDown(self):
         self.directory.cleanup()
@@ -57,44 +43,44 @@ def tearDown(self):
     def test_update_with_diffs(self):
         """The count should be 1 and makeapirequestPatch should be called."""
 
-        self.count = update(self.directory.path, self.token)
+        self.count = update(self.directory.path, self.token, report=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
 
     def test_update_with_multiple_diffs(self):
         """The count should be 1 and makeapirequestPatch should be called."""
 
-        self.repo_data['testvalue2'] = 'test2'
-        self.mem_data['value'][0]['testvalue'] = 'test'
-        self.mem_data['value'][0]['testvalue2'] = 'test1'
+        self.repo_data["testvalue2"] = "test2"
+        self.mem_data["value"][0]["testvalue"] = "test"
+        self.mem_data["value"][0]["testvalue2"] = "test1"
 
-        self.count = update(self.directory.path, self.token)
+        self.count = update(self.directory.path, self.token, report=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 2)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
 
     def test_update_with_no_diffs(self):
         """The count should be 0 and makeapirequestPatch should not be called."""
 
-        self.mem_data['value'][0]['testvalue'] = 'test1'
-        self.count = update(self.directory.path, self.token)
+        self.mem_data["value"][0]["testvalue"] = "test1"
+        self.count = update(self.directory.path, self.token, report=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
 
     def test_update_config_not_found(self):
         """The count should be 0 and makeapirequestPost should be called."""
 
-        self.mem_data['value'][0]['displayName'] = 'test1'
-        self.count = update(self.directory.path, self.token)
+        self.mem_data["value"][0]["displayName"] = "test1"
+        self.count = update(self.directory.path, self.token, report=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count, [])
         self.assertEqual(self.makeapirequestPost.call_count, 1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Update/test_update_compliance.py b/tests/Update/test_update_compliance.py
index 0c4455ac..b21dba2d 100644
--- a/tests/Update/test_update_compliance.py
+++ b/tests/Update/test_update_compliance.py
@@ -16,58 +16,54 @@ def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
         self.directory.makedir("Compliance Policies")
-        self.directory.write(
-            "Compliance Policies/Policies/test.json", '{"test": "test"}',
-            encoding='utf-8')
-        self.directory.write(
-            "Compliance Policies/Policies/test.txt", 'txt',
-            encoding='utf-8')
-        self.token = 'token'
-        self.mem_data = {"value": [{"@odata.type": "test",
-                                    "id": "0",
-                                    "displayName": "test",
-                                    "testvalue": "test",
-                                    "scheduledActionsForRule": [{"scheduledActionConfigurations": [{"gracePeriodHours": 0}]}],
-                                    "assignments": [{"target": {"groupId": "test"}}]}]}
-        self.repo_data = {"@odata.type": "test",
-                          "id": "0",
-                          "displayName": "test",
-                          "testvalue": "test1",
-                          "scheduledActionsForRule": [{"scheduledActionConfigurations": [{"gracePeriodHours": 1}]}],
-                          "assignments": [{"target": {"groupName": "test1"}}]}
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.update_compliance.batch_assignment')
+        self.directory.write("Compliance Policies/Policies/test.json", '{"test": "test"}', encoding="utf-8")
+        self.directory.write("Compliance Policies/Policies/test.txt", "txt", encoding="utf-8")
+        self.token = "token"
+        self.mem_data = {
+            "value": [
+                {
+                    "@odata.type": "test",
+                    "id": "0",
+                    "displayName": "test",
+                    "testvalue": "test",
+                    "scheduledActionsForRule": [{"scheduledActionConfigurations": [{"gracePeriodHours": 0}]}],
+                    "assignments": [{"target": {"groupId": "test"}}],
+                }
+            ]
+        }
+        self.repo_data = {
+            "@odata.type": "test",
+            "id": "0",
+            "displayName": "test",
+            "testvalue": "test1",
+            "scheduledActionsForRule": [{"scheduledActionConfigurations": [{"gracePeriodHours": 1}]}],
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
+
+        self.batch_assignment_patch = patch("src.IntuneCD.update_compliance.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.update_compliance.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.update_compliance.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.update_compliance.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.update_compliance.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
-        self.update_assignment_patch = patch(
-            'src.IntuneCD.update_compliance.update_assignment')
+        self.update_assignment_patch = patch("src.IntuneCD.update_compliance.update_assignment")
         self.update_assignment = self.update_assignment_patch.start()
 
-        self.load_file_patch = patch(
-            'src.IntuneCD.update_compliance.load_file')
+        self.load_file_patch = patch("src.IntuneCD.update_compliance.load_file")
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
-        self.post_assignment_update_patch = patch(
-            'src.IntuneCD.update_compliance.post_assignment_update')
+        self.post_assignment_update_patch = patch("src.IntuneCD.update_compliance.post_assignment_update")
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
-        self.makeapirequestPatch_patch = patch(
-            'src.IntuneCD.update_compliance.makeapirequestPatch')
+        self.makeapirequestPatch_patch = patch("src.IntuneCD.update_compliance.makeapirequestPatch")
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
-        self.makeapirequestPost_patch = patch(
-            'src.IntuneCD.update_compliance.makeapirequestPost')
+        self.makeapirequestPost_patch = patch("src.IntuneCD.update_compliance.makeapirequestPost")
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
@@ -87,7 +83,7 @@ def test_update_with_diffs_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 2)
+        self.assertEqual(self.count[0].count, 2)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -96,20 +92,20 @@ def test_update_with_diffs_no_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 2)
+        self.assertEqual(self.count[0].count, 2)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_with_no_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update should be called,
-         and makeapirequestPatch should not be called."""
+        and makeapirequestPatch should not be called."""
 
         self.mem_data["value"][0]["testvalue"] = "test1"
         self.mem_data["value"][0]["scheduledActionsForRule"][0]["scheduledActionConfigurations"][0]["gracePeriodHours"] = 1
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -117,12 +113,11 @@ def test_update_with_no_diffs_no_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPatch should not be called."""
 
         self.mem_data["value"][0]["testvalue"] = "test1"
-        self.mem_data["value"][0]["scheduledActionsForRule"][0]["scheduledActionConfigurations"][0][
-            "gracePeriodHours"] = 1
+        self.mem_data["value"][0]["scheduledActionsForRule"][0]["scheduledActionConfigurations"][0]["gracePeriodHours"] = 1
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
@@ -133,10 +128,10 @@ def test_update_config_not_found_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count, [])
         self.assertEqual(self.makeapirequestPost.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Update/test_update_conditionalAccess.py b/tests/Update/test_update_conditionalAccess.py
index 76e479b2..396c0bd5 100644
--- a/tests/Update/test_update_conditionalAccess.py
+++ b/tests/Update/test_update_conditionalAccess.py
@@ -16,47 +16,49 @@ def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
         self.directory.makedir("Conditional Access")
-        self.directory.write(
-            "Conditional Access/test.json", '{"test": "test"}',
-            encoding='utf-8')
-        self.directory.write(
-            "Conditional Access/test.txt", 'txt',
-            encoding='utf-8')
-        self.token = 'token'
-        self.mem_data = {"value": [{
+        self.directory.write("Conditional Access/test.json", '{"test": "test"}', encoding="utf-8")
+        self.directory.write("Conditional Access/test.txt", "txt", encoding="utf-8")
+        self.token = "token"
+        self.mem_data = {
+            "value": [
+                {
                     "displayName": "test",
                     "id": 1,
                     "conditions": {
-                            "clientAppTypes": ['all'],
-                            "applications": {
-                                "includeApplications": ['All'],
-                                "excludedApplications": ['d4ebce55-015a-49b5-a083-c84d1797ae8c']}},
-                    "grantControls": {}}]}
+                        "clientAppTypes": ["all"],
+                        "applications": {
+                            "includeApplications": ["All"],
+                            "excludedApplications": ["d4ebce55-015a-49b5-a083-c84d1797ae8c"],
+                        },
+                    },
+                    "grantControls": {},
+                }
+            ]
+        }
         self.repo_data = {
-                    "displayName": "test",
-                    "conditions": {
-                            "clientAppTypes": ['all'],
-                            "applications": {
-                                "includeApplications": ['All'],
-                                "excludedApplications": ['d4ebce55-015a-49b5-a083-c84d1797ae8c', '2']}},
-                    "grantControls": {}}
-
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.update_conditionalAccess.makeapirequest')
+            "displayName": "test",
+            "conditions": {
+                "clientAppTypes": ["all"],
+                "applications": {
+                    "includeApplications": ["All"],
+                    "excludedApplications": ["d4ebce55-015a-49b5-a083-c84d1797ae8c", "2"],
+                },
+            },
+            "grantControls": {},
+        }
+
+        self.makeapirequest_patch = patch("src.IntuneCD.update_conditionalAccess.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
-        self.load_file_patch = patch(
-            'src.IntuneCD.update_conditionalAccess.load_file')
+        self.load_file_patch = patch("src.IntuneCD.update_conditionalAccess.load_file")
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
-        self.makeapirequestPatch_patch = patch(
-            'src.IntuneCD.update_conditionalAccess.makeapirequestPatch')
+        self.makeapirequestPatch_patch = patch("src.IntuneCD.update_conditionalAccess.makeapirequestPatch")
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
-        self.makeapirequestPost_patch = patch(
-            'src.IntuneCD.update_conditionalAccess.makeapirequestPost')
+        self.makeapirequestPost_patch = patch("src.IntuneCD.update_conditionalAccess.makeapirequestPost")
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
@@ -70,18 +72,17 @@ def tearDown(self):
     def test_update_with_diffs(self):
         """The count should be 1 and the makeapirequestPatch should be called."""
 
-        self.count = update(self.directory.path, self.token)
+        self.count = update(self.directory.path, self.token, report=False)
 
         self.assertEqual(self.count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
 
-
     def test_update_with_no_diffs(self):
         """The count should be 0, the post_assignment_update and makeapirequestPatch should not be called."""
 
-        self.repo_data['conditions']['applications']['excludedApplications'] = ['d4ebce55-015a-49b5-a083-c84d1797ae8c']
+        self.repo_data["conditions"]["applications"]["excludedApplications"] = ["d4ebce55-015a-49b5-a083-c84d1797ae8c"]
 
-        self.count = update(self.directory.path, self.token)
+        self.count = update(self.directory.path, self.token, report=False)
 
         self.assertEqual(self.count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
@@ -92,7 +93,7 @@ def test_update_config_not_found(self):
         self.mem_data["value"][0]["displayName"] = "test1"
         self.makeapirequest.return_value = self.mem_data
 
-        self.count = update(self.directory.path, self.token)
+        self.count = update(self.directory.path, self.token, report=False)
 
         self.assertEqual(self.count, 0)
         self.assertEqual(self.makeapirequestPost.call_count, 1)
@@ -100,10 +101,10 @@ def test_update_config_not_found(self):
     def test_update_config_no_id(self):
         """The count should be 0 and makeapirequestPost should not be called."""
 
-        self.mem_data["value"][0].pop('id')
+        self.mem_data["value"][0].pop("id")
         self.makeapirequest.return_value = self.mem_data
 
-        self.count = update(self.directory.path, self.token)
+        self.count = update(self.directory.path, self.token, report=False)
 
         self.assertEqual(self.count, 0)
         self.assertEqual(self.makeapirequestPost.call_count, 0)
@@ -111,15 +112,15 @@ def test_update_config_no_id(self):
     def test_update_config_grantControls(self):
         """The count should be 0 and makeapirequestPost should not be called."""
 
-        self.repo_data['conditions']['applications']['excludedApplications'] = ['d4ebce55-015a-49b5-a083-c84d1797ae8c']
-        self.mem_data["value"][0]['grantControls'] = {'authenticationStrength@odata.context': 'test'}
+        self.repo_data["conditions"]["applications"]["excludedApplications"] = ["d4ebce55-015a-49b5-a083-c84d1797ae8c"]
+        self.mem_data["value"][0]["grantControls"] = {"authenticationStrength@odata.context": "test"}
         self.makeapirequest.return_value = self.mem_data
 
-        self.count = update(self.directory.path, self.token)
+        self.count = update(self.directory.path, self.token, report=False)
 
         self.assertEqual(self.count, 0)
         self.assertEqual(self.makeapirequestPost.call_count, 0)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Update/test_update_configurationPolicies.py b/tests/Update/test_update_configurationPolicies.py
index dd1f2e96..775b0ee3 100644
--- a/tests/Update/test_update_configurationPolicies.py
+++ b/tests/Update/test_update_configurationPolicies.py
@@ -16,62 +16,54 @@ def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
         self.directory.makedir("Settings Catalog")
-        self.directory.write(
-            "Settings Catalog/test.json", '{"test": "test"}',
-            encoding='utf-8')
-        self.directory.write(
-            "Settings Catalog/test.txt", 'txt',
-            encoding='utf-8')
-        self.token = 'token'
-        self.mem_data = {"value": [{"@odata.type": "test",
-                                    "id": "0",
-                                    "name": "test",
-                                    "testvalue": "test",
-                                    "settings": [{"id": "0",
-                                                  "testvalue": "test"}],
-                                    "assignments": [{"target": {"groupId": "test"}}]}]}
-        self.repo_data = {"@odata.type": "test",
-                          "id": "0",
-                          "name": "test",
-                          "testvalue": "test1",
-                          "settings": [
-                              {
-                                  "id": "0",
-                                  "testvalue": "test1"}],
-                          "assignments": [{"target": {"groupName": "test1"}}]}
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.update_configurationPolicies.batch_assignment')
+        self.directory.write("Settings Catalog/test.json", '{"test": "test"}', encoding="utf-8")
+        self.directory.write("Settings Catalog/test.txt", "txt", encoding="utf-8")
+        self.token = "token"
+        self.mem_data = {
+            "value": [
+                {
+                    "@odata.type": "test",
+                    "id": "0",
+                    "name": "test",
+                    "testvalue": "test",
+                    "settings": [{"id": "0", "testvalue": "test"}],
+                    "assignments": [{"target": {"groupId": "test"}}],
+                }
+            ]
+        }
+        self.repo_data = {
+            "@odata.type": "test",
+            "id": "0",
+            "name": "test",
+            "testvalue": "test1",
+            "settings": [{"id": "0", "testvalue": "test1"}],
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
+
+        self.batch_assignment_patch = patch("src.IntuneCD.update_configurationPolicies.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.update_configurationPolicies.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.update_configurationPolicies.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.update_configurationPolicies.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.update_configurationPolicies.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
-        self.update_assignment_patch = patch(
-            'src.IntuneCD.update_configurationPolicies.update_assignment')
+        self.update_assignment_patch = patch("src.IntuneCD.update_configurationPolicies.update_assignment")
         self.update_assignment = self.update_assignment_patch.start()
 
-        self.load_file_patch = patch(
-            'src.IntuneCD.update_configurationPolicies.load_file')
+        self.load_file_patch = patch("src.IntuneCD.update_configurationPolicies.load_file")
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
-        self.post_assignment_update_patch = patch(
-            'src.IntuneCD.update_configurationPolicies.post_assignment_update')
+        self.post_assignment_update_patch = patch("src.IntuneCD.update_configurationPolicies.post_assignment_update")
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
-        self.makeapirequestPatch_patch = patch(
-            'src.IntuneCD.update_configurationPolicies.makeapirequestPut')
+        self.makeapirequestPatch_patch = patch("src.IntuneCD.update_configurationPolicies.makeapirequestPut")
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
-        self.makeapirequestPost_patch = patch(
-            'src.IntuneCD.update_configurationPolicies.makeapirequestPost')
+        self.makeapirequestPost_patch = patch("src.IntuneCD.update_configurationPolicies.makeapirequestPost")
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
@@ -91,7 +83,7 @@ def test_update_with_diffs_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -100,19 +92,19 @@ def test_update_with_diffs_no_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_with_no_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update should be called,
-         and makeapirequestPatch should not be called."""
+        and makeapirequestPatch should not be called."""
 
         self.mem_data["value"][0]["testvalue"] = "test1"
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -123,7 +115,7 @@ def test_update_with_no_diffs_no_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
@@ -134,10 +126,10 @@ def test_update_config_not_found_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count, [])
         self.assertEqual(self.makeapirequestPost.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Update/test_update_enrollmentStatusPage.py b/tests/Update/test_update_enrollmentStatusPage.py
index dd98971f..2d4ca32d 100644
--- a/tests/Update/test_update_enrollmentStatusPage.py
+++ b/tests/Update/test_update_enrollmentStatusPage.py
@@ -16,56 +16,54 @@ def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
         self.directory.makedir("Enrollment Profiles/Windows/ESP")
-        self.directory.write(
-            "Enrollment Profiles/Windows/ESP/test.json", '{"test": "test"}',
-            encoding='utf-8')
-        self.token = 'token'
-        self.app_ids = {'value': [{'id': "0"}]}
-        self.mem_data = {"value": [{"@odata.type": "test",
-                                    "id": "0",
-                                    "displayName": "test",
-                                    "testvalue": "test",
-                                    "selectedMobileAppIds": ["1"],
-                                    "assignments": [{"target": {"groupId": "test"}}]}]}
-        self.repo_data = {"@odata.type": "test",
-                          "id": "0",
-                          "displayName": "test",
-                          "testvalue": "test1",
-                          "selectedMobileAppNames": [{'name': 'app1', 'type': '#graph.mobileApp'}],
-                          "assignments": [{"target": {"groupName": "test1"}}]}
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.update_enrollmentStatusPage.batch_assignment')
+        self.directory.write("Enrollment Profiles/Windows/ESP/test.json", '{"test": "test"}', encoding="utf-8")
+        self.token = "token"
+        self.app_ids = {"value": [{"id": "0"}]}
+        self.mem_data = {
+            "value": [
+                {
+                    "@odata.type": "test",
+                    "id": "0",
+                    "displayName": "test",
+                    "testvalue": "test",
+                    "selectedMobileAppIds": ["1"],
+                    "assignments": [{"target": {"groupId": "test"}}],
+                }
+            ]
+        }
+        self.repo_data = {
+            "@odata.type": "test",
+            "id": "0",
+            "displayName": "test",
+            "testvalue": "test1",
+            "selectedMobileAppNames": [{"name": "app1", "type": "#graph.mobileApp"}],
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
+
+        self.batch_assignment_patch = patch("src.IntuneCD.update_enrollmentStatusPage.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.update_enrollmentStatusPage.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.update_enrollmentStatusPage.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.update_enrollmentStatusPage.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.update_enrollmentStatusPage.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.side_effect = self.mem_data, self.app_ids
 
-        self.update_assignment_patch = patch(
-            'src.IntuneCD.update_enrollmentStatusPage.update_assignment')
+        self.update_assignment_patch = patch("src.IntuneCD.update_enrollmentStatusPage.update_assignment")
         self.update_assignment = self.update_assignment_patch.start()
 
-        self.load_file_patch = patch(
-            'src.IntuneCD.update_enrollmentStatusPage.load_file')
+        self.load_file_patch = patch("src.IntuneCD.update_enrollmentStatusPage.load_file")
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
-        self.post_assignment_update_patch = patch(
-            'src.IntuneCD.update_enrollmentStatusPage.post_assignment_update')
+        self.post_assignment_update_patch = patch("src.IntuneCD.update_enrollmentStatusPage.post_assignment_update")
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
-        self.makeapirequestPatch_patch = patch(
-            'src.IntuneCD.update_enrollmentStatusPage.makeapirequestPatch')
+        self.makeapirequestPatch_patch = patch("src.IntuneCD.update_enrollmentStatusPage.makeapirequestPatch")
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
-        self.makeapirequestPost_patch = patch(
-            'src.IntuneCD.update_enrollmentStatusPage.makeapirequestPost')
+        self.makeapirequestPost_patch = patch("src.IntuneCD.update_enrollmentStatusPage.makeapirequestPost")
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
@@ -85,7 +83,7 @@ def test_update_with_diffs_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 2)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -94,20 +92,20 @@ def test_update_with_diffs_no_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 2)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_with_no_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update should be called,
-         and makeapirequestPatch should not be called."""
+        and makeapirequestPatch should not be called."""
 
         self.mem_data["value"][0]["testvalue"] = "test1"
         self.mem_data["value"][0]["selectedMobileAppIds"][0] = "0"
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -119,7 +117,7 @@ def test_update_with_no_diffs_no_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
@@ -129,11 +127,11 @@ def test_update_with_no_diffs_no_assignment_no_app_id(self):
         self.mem_data["value"][0]["testvalue"] = "test1"
         self.mem_data["value"][0]["selectedMobileAppIds"][0] = "0"
 
-        self.makeapirequest.side_effect = [self.mem_data, {'value': []}]
+        self.makeapirequest.side_effect = [self.mem_data, {"value": []}]
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
@@ -144,10 +142,10 @@ def test_update_config_not_found_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count, [])
         self.assertEqual(self.makeapirequestPost.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Update/test_update_notificationTemplate.py b/tests/Update/test_update_notificationTemplate.py
index e8953279..be10d743 100644
--- a/tests/Update/test_update_notificationTemplate.py
+++ b/tests/Update/test_update_notificationTemplate.py
@@ -16,22 +16,21 @@ def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
         self.directory.makedir("Compliance Policies/Message Templates")
-        self.directory.write(
-            "Compliance Policies/Message Templates/test.json",
-            '{"test": "test"}',
-            encoding='utf-8')
-        self.directory.write(
-            "Compliance Policies/Message Templates/test.txt",
-            '{"test": "test"}',
-            encoding='utf-8')
-        self.token = 'token'
-        self.mem_data = {"value": [{
-            "id": "0",
-            "displayName": "test",
-            "defaultLocale": "en-us",
-            "brandingOptions": "test",
-            "roleScopeTagIds": "[0]",
-            "localizedNotificationMessages": [{"messageTemplate": "test"}]}]}
+        self.directory.write("Compliance Policies/Message Templates/test.json", '{"test": "test"}', encoding="utf-8")
+        self.directory.write("Compliance Policies/Message Templates/test.txt", '{"test": "test"}', encoding="utf-8")
+        self.token = "token"
+        self.mem_data = {
+            "value": [
+                {
+                    "id": "0",
+                    "displayName": "test",
+                    "defaultLocale": "en-us",
+                    "brandingOptions": "test",
+                    "roleScopeTagIds": "[0]",
+                    "localizedNotificationMessages": [{"messageTemplate": "test"}],
+                }
+            ]
+        }
         self.mem_template_data = {
             "id": "0",
             "displayName": "test",
@@ -39,34 +38,29 @@ def setUp(self):
             "brandingOptions": "test",
             "roleScopeTagIds": "[0]",
             "localizedNotificationMessages": [
-                {
-                    "messageTemplate": "test",
-                    'lastModifiedDateTime': 'test',
-                    "locale": "en-us",
-                    "id": "0"}]}
+                {"messageTemplate": "test", "lastModifiedDateTime": "test", "locale": "en-us", "id": "0"}
+            ],
+        }
         self.repo_data = {
             "displayName": "test",
             "defaultLocale": "en-us",
             "brandingOptions": "test",
             "roleScopeTagIds": "[0]",
-            "localizedNotificationMessages": [{"messageTemplate": "test1", "locale": "en-us"}]}
+            "localizedNotificationMessages": [{"messageTemplate": "test1", "locale": "en-us"}],
+        }
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.update_notificationTemplate.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.update_notificationTemplate.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
-        self.load_file_patch = patch(
-            'src.IntuneCD.update_notificationTemplate.load_file')
+        self.load_file_patch = patch("src.IntuneCD.update_notificationTemplate.load_file")
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
-        self.makeapirequestPatch_patch = patch(
-            'src.IntuneCD.update_notificationTemplate.makeapirequestPatch')
+        self.makeapirequestPatch_patch = patch("src.IntuneCD.update_notificationTemplate.makeapirequestPatch")
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
-        self.makeapirequestPost_patch = patch(
-            'src.IntuneCD.update_notificationTemplate.makeapirequestPost')
+        self.makeapirequestPost_patch = patch("src.IntuneCD.update_notificationTemplate.makeapirequestPost")
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
@@ -80,46 +74,43 @@ def tearDown(self):
     def test_update_with_diffs(self):
         """The count should be 1 and makeapirequestPatch should be called."""
 
-        self.makeapirequest.side_effect = [
-            self.mem_data, self.mem_template_data]
-        self.count = update(self.directory.path, self.token)
+        self.makeapirequest.side_effect = [self.mem_data, self.mem_template_data]
+        self.count = update(self.directory.path, self.token, report=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
 
     def test_update_with_multiple_diffs(self):
         """The count should be 2 and makeapirequestPatch should be called."""
 
-        self.repo_data['brandingOptions'] = 'test1'
-        self.makeapirequest.side_effect = [
-            self.mem_data, self.mem_template_data]
+        self.repo_data["brandingOptions"] = "test1"
+        self.makeapirequest.side_effect = [self.mem_data, self.mem_template_data]
 
-        self.count = update(self.directory.path, self.token)
+        self.count = update(self.directory.path, self.token, report=False)
 
-        self.assertEqual(self.count, 2)
+        self.assertEqual(self.count[0].count, 2)
         self.assertEqual(self.makeapirequestPatch.call_count, 2)
 
     def test_update_with_no_diffs(self):
         """The count should be 0 and makeapirequestPatch should not be called."""
 
-        self.mem_template_data['localizedNotificationMessages'][0]['messageTemplate'] = 'test1'
-        self.makeapirequest.side_effect = [
-            self.mem_data, self.mem_template_data]
-        self.count = update(self.directory.path, self.token)
+        self.mem_template_data["localizedNotificationMessages"][0]["messageTemplate"] = "test1"
+        self.makeapirequest.side_effect = [self.mem_data, self.mem_template_data]
+        self.count = update(self.directory.path, self.token, report=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
 
     def test_update_config_not_found(self):
         """The count should be 0 and makeapirequestPost should be called."""
 
-        self.mem_data['value'][0]['displayName'] = 'test1'
-        self.count = update(self.directory.path, self.token)
+        self.mem_data["value"][0]["displayName"] = "test1"
+        self.count = update(self.directory.path, self.token, report=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count, [])
         self.assertEqual(self.makeapirequestPost.call_count, 2)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Update/test_update_powershellScripts.py b/tests/Update/test_update_powershellScripts.py
index 9ff0efcb..c002e881 100644
--- a/tests/Update/test_update_powershellScripts.py
+++ b/tests/Update/test_update_powershellScripts.py
@@ -17,14 +17,11 @@ def setUp(self):
         self.directory.create()
         self.directory.makedir("Scripts/Powershell")
         self.directory.makedir("Scripts/Powershell/Script Data")
+        self.directory.write("Scripts/Powershell/test.json", '{"test": "test"}', encoding="utf-8")
         self.directory.write(
-            "Scripts/Powershell/test.json", '{"test": "test"}',
-            encoding='utf-8')
-        self.directory.write(
-            "Scripts/Powershell/Script Data/test.ps1",
-            'You found a secret message, hooray!',
-            encoding='utf-8')
-        self.token = 'token'
+            "Scripts/Powershell/Script Data/test.ps1", "You found a secret message, hooray!", encoding="utf-8"
+        )
+        self.token = "token"
         self.mem_script_content = "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2Us"
         self.repo_script_content = "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE="
         self.mem_powershellScript_data = {
@@ -36,57 +33,53 @@ def setUp(self):
                     "testvalue": "test",
                     "scriptContent": self.mem_script_content,
                     "fileName": "test.ps1",
-                    "assignments": [
-                        {
-                            "target": {
-                                "groupId": "test"}}]}]}
-        self.mem_data = {"@odata.type": "test",
-                         "id": "0",
-                         "displayName": "test",
-                         "testvalue": "test",
-                         "scriptContent": self.mem_script_content,
-                         "fileName": "test.ps1",
-                         "assignments": [{"target": {"groupId": "test"}}]}
-        self.repo_data = {"@odata.type": "test",
-                          "id": "0",
-                          "displayName": "test",
-                          "testvalue": "test",
-                          "scriptContent": self.repo_script_content,
-                          "fileName": "test.ps1",
-                          "assignments": [{"target": {"groupId": "test"}}]}
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.update_powershellScripts.batch_assignment')
+                    "assignments": [{"target": {"groupId": "test"}}],
+                }
+            ]
+        }
+        self.mem_data = {
+            "@odata.type": "test",
+            "id": "0",
+            "displayName": "test",
+            "testvalue": "test",
+            "scriptContent": self.mem_script_content,
+            "fileName": "test.ps1",
+            "assignments": [{"target": {"groupId": "test"}}],
+        }
+        self.repo_data = {
+            "@odata.type": "test",
+            "id": "0",
+            "displayName": "test",
+            "testvalue": "test",
+            "scriptContent": self.repo_script_content,
+            "fileName": "test.ps1",
+            "assignments": [{"target": {"groupId": "test"}}],
+        }
+
+        self.batch_assignment_patch = patch("src.IntuneCD.update_powershellScripts.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.update_powershellScripts.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.update_powershellScripts.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.update_powershellScripts.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.update_powershellScripts.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
-        self.update_assignment_patch = patch(
-            'src.IntuneCD.update_powershellScripts.update_assignment')
+        self.update_assignment_patch = patch("src.IntuneCD.update_powershellScripts.update_assignment")
         self.update_assignment = self.update_assignment_patch.start()
 
-        self.load_file_patch = patch(
-            'src.IntuneCD.update_powershellScripts.load_file')
+        self.load_file_patch = patch("src.IntuneCD.update_powershellScripts.load_file")
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
-        self.post_assignment_update_patch = patch(
-            'src.IntuneCD.update_powershellScripts.post_assignment_update')
+        self.post_assignment_update_patch = patch("src.IntuneCD.update_powershellScripts.post_assignment_update")
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
-        self.makeapirequestPatch_patch = patch(
-            'src.IntuneCD.update_powershellScripts.makeapirequestPatch')
+        self.makeapirequestPatch_patch = patch("src.IntuneCD.update_powershellScripts.makeapirequestPatch")
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
-        self.makeapirequestPost_patch = patch(
-            'src.IntuneCD.update_powershellScripts.makeapirequestPost')
+        self.makeapirequestPost_patch = patch("src.IntuneCD.update_powershellScripts.makeapirequestPost")
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
@@ -104,55 +97,51 @@ def tearDown(self):
     def test_update_with_diffs_and_assignment(self):
         """The count should be 1 and the post_assignment_update and makeapirequestPatch should be called."""
 
-        self.repo_data['testvalue'] = "test1"
-        self.makeapirequest.side_effect = [
-            self.mem_powershellScript_data, self.mem_data]
+        self.repo_data["testvalue"] = "test1"
+        self.makeapirequest.side_effect = [self.mem_powershellScript_data, self.mem_data]
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 2)
+        self.assertEqual(self.count[0].count, 2)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_with_diffs_no_assignment(self):
         """The count should be 1 and the makeapirequestPatch should be called."""
 
-        self.repo_data['testvalue'] = "test1"
-        self.makeapirequest.side_effect = [
-            self.mem_powershellScript_data, self.mem_data]
+        self.repo_data["testvalue"] = "test1"
+        self.makeapirequest.side_effect = [self.mem_powershellScript_data, self.mem_data]
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 2)
+        self.assertEqual(self.count[0].count, 2)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_with_no_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update should be called,
-         and makeapirequestPatch should not be called."""
+        and makeapirequestPatch should not be called."""
 
-        self.mem_data['testvalue'] = "test"
-        self.mem_data['scriptContent'] = self.repo_script_content
-        self.makeapirequest.side_effect = [
-            self.mem_powershellScript_data, self.mem_data]
+        self.mem_data["testvalue"] = "test"
+        self.mem_data["scriptContent"] = self.repo_script_content
+        self.makeapirequest.side_effect = [self.mem_powershellScript_data, self.mem_data]
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_with_no_diffs_no_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPatch should not be called."""
 
-        self.mem_data['testvalue'] = "test"
-        self.mem_data['scriptContent'] = self.repo_script_content
-        self.makeapirequest.side_effect = [
-            self.mem_powershellScript_data, self.mem_data]
+        self.mem_data["testvalue"] = "test"
+        self.mem_data["scriptContent"] = self.repo_script_content
+        self.makeapirequest.side_effect = [self.mem_powershellScript_data, self.mem_data]
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
@@ -164,10 +153,10 @@ def test_update_config_not_found_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count, [])
         self.assertEqual(self.makeapirequestPost.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Update/test_update_proactiveRemediation.py b/tests/Update/test_update_proactiveRemediation.py
index b41f5b15..3565684c 100644
--- a/tests/Update/test_update_proactiveRemediation.py
+++ b/tests/Update/test_update_proactiveRemediation.py
@@ -17,18 +17,18 @@ def setUp(self):
         self.directory.create()
         self.directory.makedir("Proactive Remediations")
         self.directory.makedir("Proactive Remediations/Script Data")
-        self.directory.write(
-            "Proactive Remediations/test.json", '{"test": "test"}',
-            encoding='utf-8')
+        self.directory.write("Proactive Remediations/test.json", '{"test": "test"}', encoding="utf-8")
         self.directory.write(
             "Proactive Remediations/Script Data/test_DetectionScript.ps1",
-            'You found a secret message, hooray!',
-            encoding='utf-8')
+            "You found a secret message, hooray!",
+            encoding="utf-8",
+        )
         self.directory.write(
             "Proactive Remediations/Script Data/test_RemediationScript.ps1",
-            'You found a secret message, hooray!',
-            encoding='utf-8')
-        self.token = 'token'
+            "You found a secret message, hooray!",
+            encoding="utf-8",
+        )
+        self.token = "token"
         self.script_content = "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE="
         self.mem_remediationScript_data = {
             "value": [
@@ -40,59 +40,55 @@ def setUp(self):
                     "detectionScriptContent": self.script_content,
                     "remediationScriptContent": self.script_content,
                     "fileName": "test.ps1",
-                    "assignments": [
-                        {
-                            "target": {
-                                "groupId": "test"}}]}]}
-        self.mem_data = {"@odata.type": "test",
-                         "id": "0",
-                         "displayName": "test",
-                         "testvalue": "test",
-                         "detectionScriptContent": self.script_content,
-                         "remediationScriptContent": self.script_content,
-                         "fileName": "test.ps1",
-                         "assignments": [{"target": {"groupId": "test"}}]}
-        self.repo_data = {"@odata.type": "test",
-                          "id": "0",
-                          "displayName": "test",
-                          "testvalue": "test",
-                          "detectionScriptContent": self.script_content,
-                          "remediationScriptContent": self.script_content,
-                          "fileName": "test.ps1",
-                          "assignments": [{"target": {"groupId": "test"}}]}
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.update_proactiveRemediation.batch_assignment')
+                    "assignments": [{"target": {"groupId": "test"}}],
+                }
+            ]
+        }
+        self.mem_data = {
+            "@odata.type": "test",
+            "id": "0",
+            "displayName": "test",
+            "testvalue": "test",
+            "detectionScriptContent": self.script_content,
+            "remediationScriptContent": self.script_content,
+            "fileName": "test.ps1",
+            "assignments": [{"target": {"groupId": "test"}}],
+        }
+        self.repo_data = {
+            "@odata.type": "test",
+            "id": "0",
+            "displayName": "test",
+            "testvalue": "test",
+            "detectionScriptContent": self.script_content,
+            "remediationScriptContent": self.script_content,
+            "fileName": "test.ps1",
+            "assignments": [{"target": {"groupId": "test"}}],
+        }
+
+        self.batch_assignment_patch = patch("src.IntuneCD.update_proactiveRemediation.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.update_proactiveRemediation.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.update_proactiveRemediation.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.update_proactiveRemediation.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.update_proactiveRemediation.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
-        self.update_assignment_patch = patch(
-            'src.IntuneCD.update_proactiveRemediation.update_assignment')
+        self.update_assignment_patch = patch("src.IntuneCD.update_proactiveRemediation.update_assignment")
         self.update_assignment = self.update_assignment_patch.start()
 
-        self.load_file_patch = patch(
-            'src.IntuneCD.update_proactiveRemediation.load_file')
+        self.load_file_patch = patch("src.IntuneCD.update_proactiveRemediation.load_file")
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
-        self.post_assignment_update_patch = patch(
-            'src.IntuneCD.update_proactiveRemediation.post_assignment_update')
+        self.post_assignment_update_patch = patch("src.IntuneCD.update_proactiveRemediation.post_assignment_update")
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
-        self.makeapirequestPatch_patch = patch(
-            'src.IntuneCD.update_proactiveRemediation.makeapirequestPatch')
+        self.makeapirequestPatch_patch = patch("src.IntuneCD.update_proactiveRemediation.makeapirequestPatch")
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
-        self.makeapirequestPost_patch = patch(
-            'src.IntuneCD.update_proactiveRemediation.makeapirequestPost')
+        self.makeapirequestPost_patch = patch("src.IntuneCD.update_proactiveRemediation.makeapirequestPost")
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
@@ -110,105 +106,97 @@ def tearDown(self):
     def test_update_with_diffs_and_assignment(self):
         """The count should be 1 and the post_assignment_update and makeapirequestPatch should be called."""
 
-        self.repo_data['testvalue'] = "test1"
-        self.makeapirequest.side_effect = [
-            self.mem_remediationScript_data, self.mem_data]
+        self.repo_data["testvalue"] = "test1"
+        self.makeapirequest.side_effect = [self.mem_remediationScript_data, self.mem_data]
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_with_detection_script_diff_and_assignment(self):
         """The count should be 1 and the post_assignment_update and makeapirequestPatch should be called."""
 
-        self.mem_data['detectionScriptContent'] = "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheQ=="
-        self.makeapirequest.side_effect = [
-            self.mem_remediationScript_data, self.mem_data]
+        self.mem_data["detectionScriptContent"] = "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheQ=="
+        self.makeapirequest.side_effect = [self.mem_remediationScript_data, self.mem_data]
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_with_detection_script_diff_no_assignment(self):
         """The count should be 1 and the makeapirequestPatch should be called."""
 
-        self.mem_data['detectionScriptContent'] = "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheQ=="
-        self.makeapirequest.side_effect = [
-            self.mem_remediationScript_data, self.mem_data]
+        self.mem_data["detectionScriptContent"] = "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheQ=="
+        self.makeapirequest.side_effect = [self.mem_remediationScript_data, self.mem_data]
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_with_remediation_script_diff_and_assignment(self):
         """The count should be 1 and the post_assignment_update and makeapirequestPatch should be called."""
 
-        self.mem_data['remediationScriptContent'] = "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheQ=="
-        self.makeapirequest.side_effect = [
-            self.mem_remediationScript_data, self.mem_data]
+        self.mem_data["remediationScriptContent"] = "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheQ=="
+        self.makeapirequest.side_effect = [self.mem_remediationScript_data, self.mem_data]
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_with_remediation_script_diff_no_assignment(self):
         """The count should be 1 and the makeapirequestPatch should be called."""
 
-        self.mem_data['remediationScriptContent'] = "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheQ=="
-        self.makeapirequest.side_effect = [
-            self.mem_remediationScript_data, self.mem_data]
+        self.mem_data["remediationScriptContent"] = "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheQ=="
+        self.makeapirequest.side_effect = [self.mem_remediationScript_data, self.mem_data]
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_with_diffs_no_assignment(self):
         """The count should be 1 and the makeapirequestPatch should be called."""
 
-        self.repo_data['testvalue'] = "test1"
-        self.makeapirequest.side_effect = [
-            self.mem_remediationScript_data, self.mem_data]
+        self.repo_data["testvalue"] = "test1"
+        self.makeapirequest.side_effect = [self.mem_remediationScript_data, self.mem_data]
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_with_no_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update should be called,
-         and makeapirequestPatch should not be called."""
+        and makeapirequestPatch should not be called."""
 
-        self.repo_data['testvalue'] = "test"
-        self.makeapirequest.side_effect = [
-            self.mem_remediationScript_data, self.mem_data]
+        self.repo_data["testvalue"] = "test"
+        self.makeapirequest.side_effect = [self.mem_remediationScript_data, self.mem_data]
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_with_no_diffs_no_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPatch should not be called."""
 
-        self.mem_data['testvalue'] = "test"
-        self.makeapirequest.side_effect = [
-            self.mem_remediationScript_data, self.mem_data]
+        self.mem_data["testvalue"] = "test"
+        self.makeapirequest.side_effect = [self.mem_remediationScript_data, self.mem_data]
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
@@ -220,10 +208,10 @@ def test_update_config_not_found_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count, [])
         self.assertEqual(self.makeapirequestPost.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Update/test_update_profiles.py b/tests/Update/test_update_profiles.py
index 49b3b83c..d9c3903a 100644
--- a/tests/Update/test_update_profiles.py
+++ b/tests/Update/test_update_profiles.py
@@ -16,65 +16,59 @@ def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
         self.directory.makedir("Device Configurations")
-        self.directory.write(
-            "Device Configurations/test.json", '{"test": "test"}',
-            encoding='utf-8')
-        self.directory.write(
-            "Device Configurations/mobileconfig/test.mobileconfig",
-            "test",
-            encoding='utf - 8')
-        self.token = 'token'
-        self.mem_data_base = {"value": [{"@odata.type": "test",
-                                         "id": "0",
-                                         "displayName": "test",
-                                         "testvalue": "test",
-                                         "assignments": [{"target": {"groupId": "test"}}]}]}
-        self.repo_data_base = {"@odata.type": "test",
-                               "id": "0",
-                               "displayName": "test",
-                               "testvalue": "test1",
-                               "assignments": [{"target": {"groupName": "test1"}}]}
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.update_profiles.batch_assignment')
+        self.directory.write("Device Configurations/test.json", '{"test": "test"}', encoding="utf-8")
+        self.directory.write("Device Configurations/mobileconfig/test.mobileconfig", "test", encoding="utf - 8")
+        self.token = "token"
+        self.mem_data_base = {
+            "value": [
+                {
+                    "@odata.type": "test",
+                    "id": "0",
+                    "displayName": "test",
+                    "testvalue": "test",
+                    "assignments": [{"target": {"groupId": "test"}}],
+                }
+            ]
+        }
+        self.repo_data_base = {
+            "@odata.type": "test",
+            "id": "0",
+            "displayName": "test",
+            "testvalue": "test1",
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
+
+        self.batch_assignment_patch = patch("src.IntuneCD.update_profiles.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.update_profiles.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.update_profiles.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.update_profiles.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.update_profiles.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data_base
 
-        self.update_assignment_patch = patch(
-            'src.IntuneCD.update_profiles.update_assignment')
+        self.update_assignment_patch = patch("src.IntuneCD.update_profiles.update_assignment")
         self.update_assignment = self.update_assignment_patch.start()
 
-        self.load_file_patch = patch(
-            'src.IntuneCD.update_profiles.load_file')
+        self.load_file_patch = patch("src.IntuneCD.update_profiles.load_file")
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data_base
 
-        self.post_assignment_update_patch = patch(
-            'src.IntuneCD.update_profiles.post_assignment_update')
+        self.post_assignment_update_patch = patch("src.IntuneCD.update_profiles.post_assignment_update")
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
-        self.makeapirequestPatch_patch = patch(
-            'src.IntuneCD.update_profiles.makeapirequestPatch')
+        self.makeapirequestPatch_patch = patch("src.IntuneCD.update_profiles.makeapirequestPatch")
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
-        self.makeapirequestPost_patch = patch(
-            'src.IntuneCD.update_profiles.makeapirequestPost')
+        self.makeapirequestPost_patch = patch("src.IntuneCD.update_profiles.makeapirequestPost")
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
-        self.plistlib_patch = patch('src.IntuneCD.update_profiles.plistlib')
+        self.plistlib_patch = patch("src.IntuneCD.update_profiles.plistlib")
         self.plistlib = self.plistlib_patch.start()
-        self.plistlib.load.return_value = {
-            'PayloadContent': [{'test': 'test'}]}
-        self.plistlib.dumps.return_value = b'test'
+        self.plistlib.load.return_value = {"PayloadContent": [{"test": "test"}]}
+        self.plistlib.dumps.return_value = b"test"
 
     def tearDown(self):
         self.directory.cleanup()
@@ -91,8 +85,8 @@ def tearDown(self):
     def test_update_custom_macOS_with_diffs_and_assignment(self):
         """The count should be 2 and the post_assignment_update and makeapirequestPatch should be called."""
 
-        self.repo_payload = {'PayloadContent': [{'test': 'test1'}]}
-        self.mem_payload = {'PayloadContent': [{'test': 'test'}]}
+        self.repo_payload = {"PayloadContent": [{"test": "test1"}]}
+        self.mem_payload = {"PayloadContent": [{"test": "test"}]}
 
         self.plistlib.load.side_effect = self.repo_payload, self.mem_payload
 
@@ -103,24 +97,26 @@ def test_update_custom_macOS_with_diffs_and_assignment(self):
         self.repo_data_base["@odata.type"] = "#microsoft.graph.macOSCustomConfiguration"
         self.repo_data_base["payload"] = "T29vIHllYWgsIGl0J3MgZ29ubmEgd29yaywgSSBwcm9taXNl"
         self.repo_data_base["payloadFileName"] = "test.mobileconfig"
+        self.repo_data_base["payloadName"] = "test"
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 2)
+        self.assertEqual(self.count[0].count, 2)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_custom_macOS_with_diffs_no_assignment(self):
         """The count should be 2 and the makeapirequestPatch should be called."""
 
-        self.repo_payload = {'PayloadContent': [{'test': 'test1'}]}
-        self.mem_payload = {'PayloadContent': [{'test': 'test'}]}
+        self.repo_payload = {"PayloadContent": [{"test": "test1"}]}
+        self.mem_payload = {"PayloadContent": [{"test": "test"}]}
 
         self.plistlib.load.side_effect = self.repo_payload, self.mem_payload
 
         self.mem_data_base["value"][0]["@odata.type"] = "#microsoft.graph.macOSCustomConfiguration"
         self.mem_data_base["value"][0]["payload"] = "T29vIHllYWgsIGl0J3MgZ29ubmEgd29yaywgSSBwcm9taXNl"
         self.mem_data_base["value"][0]["payloadFileName"] = "test.mobileconfig"
+        self.repo_data_base["payloadName"] = "test"
 
         self.repo_data_base["@odata.type"] = "#microsoft.graph.macOSCustomConfiguration"
         self.repo_data_base["payload"] = "T29vIHllYWgsIGl0J3MgZ29ubmEgd29yaywgSSBwcm9taXNl"
@@ -128,16 +124,16 @@ def test_update_custom_macOS_with_diffs_no_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 2)
+        self.assertEqual(self.count[0].count, 2)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_custom_macOS_with_no_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update should be called,
-         and makeapirequestPatch should not be called."""
+        and makeapirequestPatch should not be called."""
 
-        self.repo_payload = {'PayloadContent': [{'test': 'test'}]}
-        self.mem_payload = {'PayloadContent': [{'test': 'test'}]}
+        self.repo_payload = {"PayloadContent": [{"test": "test"}]}
+        self.mem_payload = {"PayloadContent": [{"test": "test"}]}
         self.repo_data_base["testvalue"] = "test"
 
         self.plistlib.load.side_effect = self.repo_payload, self.mem_payload
@@ -145,6 +141,7 @@ def test_update_custom_macOS_with_no_diffs_and_assignment(self):
         self.mem_data_base["value"][0]["@odata.type"] = "#microsoft.graph.macOSCustomConfiguration"
         self.mem_data_base["value"][0]["payload"] = "T29vIHllYWgsIGl0J3MgZ29ubmEgd29yaywgSSBwcm9taXNl"
         self.mem_data_base["value"][0]["payloadFileName"] = "test.mobileconfig"
+        self.repo_data_base["payloadName"] = "test"
 
         self.repo_data_base["@odata.type"] = "#microsoft.graph.macOSCustomConfiguration"
         self.repo_data_base["payload"] = "T29vIHllYWgsIGl0J3MgZ29ubmEgd29yaywgSSBwcm9taXNl"
@@ -152,15 +149,15 @@ def test_update_custom_macOS_with_no_diffs_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_custom_macOS_with_no_diffs_no_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPatch should not be called."""
 
-        self.repo_payload = {'PayloadContent': [{'test': 'test'}]}
-        self.mem_payload = {'PayloadContent': [{'test': 'test'}]}
+        self.repo_payload = {"PayloadContent": [{"test": "test"}]}
+        self.mem_payload = {"PayloadContent": [{"test": "test"}]}
         self.repo_data_base["testvalue"] = "test"
 
         self.plistlib.load.side_effect = self.repo_payload, self.mem_payload
@@ -172,18 +169,19 @@ def test_update_custom_macOS_with_no_diffs_no_assignment(self):
         self.repo_data_base["@odata.type"] = "#microsoft.graph.macOSCustomConfiguration"
         self.repo_data_base["payload"] = "T29vIHllYWgsIGl0J3MgZ29ubmEgd29yaywgSSBwcm9taXNl"
         self.repo_data_base["payloadFileName"] = "test.mobileconfig"
+        self.repo_data_base["payloadName"] = "test"
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_custom_iOS_with_diffs_and_assignment(self):
         """The count should be 2 and the post_assignment_update and makeapirequestPatch should be called."""
 
-        self.repo_payload = {'PayloadContent': [{'test': 'test1'}]}
-        self.mem_payload = {'PayloadContent': [{'test': 'test'}]}
+        self.repo_payload = {"PayloadContent": [{"test": "test1"}]}
+        self.mem_payload = {"PayloadContent": [{"test": "test"}]}
 
         self.plistlib.load.side_effect = self.repo_payload, self.mem_payload
 
@@ -194,18 +192,19 @@ def test_update_custom_iOS_with_diffs_and_assignment(self):
         self.repo_data_base["@odata.type"] = "#microsoft.graph.iosCustomConfiguration"
         self.repo_data_base["payload"] = "T29vIHllYWgsIGl0J3MgZ29ubmEgd29yaywgSSBwcm9taXNl"
         self.repo_data_base["payloadFileName"] = "test.mobileconfig"
+        self.repo_data_base["payloadName"] = "test"
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 2)
+        self.assertEqual(self.count[0].count, 2)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_custom_iOS_with_diffs_no_assignment(self):
         """The count should be 1 and the makeapirequestPatch should be called."""
 
-        self.repo_payload = {'PayloadContent': [{'test': 'test1'}]}
-        self.mem_payload = {'PayloadContent': [{'test': 'test'}]}
+        self.repo_payload = {"PayloadContent": [{"test": "test1"}]}
+        self.mem_payload = {"PayloadContent": [{"test": "test"}]}
 
         self.plistlib.load.side_effect = self.repo_payload, self.mem_payload
 
@@ -216,19 +215,20 @@ def test_update_custom_iOS_with_diffs_no_assignment(self):
         self.repo_data_base["@odata.type"] = "#microsoft.graph.iosCustomConfiguration"
         self.repo_data_base["payload"] = "T29vIHllYWgsIGl0J3MgZ29ubmEgd29yaywgSSBwcm9taXNl"
         self.repo_data_base["payloadFileName"] = "test.mobileconfig"
+        self.repo_data_base["payloadName"] = "test"
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 2)
+        self.assertEqual(self.count[0].count, 2)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_custom_iOS_with_no_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update should be called,
-         and makeapirequestPatch should not be called."""
+        and makeapirequestPatch should not be called."""
 
-        self.repo_payload = {'PayloadContent': [{'test': 'test'}]}
-        self.mem_payload = {'PayloadContent': [{'test': 'test'}]}
+        self.repo_payload = {"PayloadContent": [{"test": "test"}]}
+        self.mem_payload = {"PayloadContent": [{"test": "test"}]}
         self.repo_data_base["testvalue"] = "test"
 
         self.plistlib.load.side_effect = self.repo_payload, self.mem_payload
@@ -240,18 +240,19 @@ def test_update_custom_iOS_with_no_diffs_and_assignment(self):
         self.repo_data_base["@odata.type"] = "#microsoft.graph.iosCustomConfiguration"
         self.repo_data_base["payload"] = "T29vIHllYWgsIGl0J3MgZ29ubmEgd29yaywgSSBwcm9taXNl"
         self.repo_data_base["payloadFileName"] = "test.mobileconfig"
+        self.repo_data_base["payloadName"] = "test"
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_custom_iOS_with_no_diffs_no_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPatch should not be called."""
 
-        self.repo_payload = {'PayloadContent': [{'test': 'test'}]}
-        self.mem_payload = {'PayloadContent': [{'test': 'test'}]}
+        self.repo_payload = {"PayloadContent": [{"test": "test"}]}
+        self.mem_payload = {"PayloadContent": [{"test": "test"}]}
         self.repo_data_base["testvalue"] = "test"
 
         self.plistlib.load.side_effect = self.repo_payload, self.mem_payload
@@ -263,10 +264,11 @@ def test_update_custom_iOS_with_no_diffs_no_assignment(self):
         self.repo_data_base["@odata.type"] = "#microsoft.graph.iosCustomConfiguration"
         self.repo_data_base["payload"] = "T29vIHllYWgsIGl0J3MgZ29ubmEgd29yaywgSSBwcm9taXNl"
         self.repo_data_base["payloadFileName"] = "test.mobileconfig"
+        self.repo_data_base["payloadName"] = "test"
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
@@ -274,37 +276,38 @@ def test_update_custom_windows_with_diffs_and_assignment(self):
         """The count should be 1 and the post_assignment_update and makeapirequestPatch should be called."""
 
         self.mem_data_base["value"][0]["@odata.type"] = "#microsoft.graph.windows10CustomConfiguration"
-        self.mem_data_base["value"][0]["omaSettings"] = [{
-            "isEncrypted": True,
-            "@odata.type": "#microsoft.graph.windows10OmaSetting",
-            "secretReferenceValueId": "0",
-            "omaUri": "test uri",
-            "displayName": "test",
-            "description": "",
-            "value": {}}]
-
-        self.oma_values = {
-            '@odata.context': 'https://graph.microsoft.com/beta/$metadata#Edm.String',
-            'value': 'password'}
+        self.mem_data_base["value"][0]["omaSettings"] = [
+            {
+                "isEncrypted": True,
+                "@odata.type": "#microsoft.graph.windows10OmaSetting",
+                "secretReferenceValueId": "0",
+                "omaUri": "test uri",
+                "displayName": "test",
+                "description": "",
+                "value": {},
+            }
+        ]
+
+        self.oma_values = {"@odata.context": "https://graph.microsoft.com/beta/$metadata#Edm.String", "value": "password"}
 
         self.repo_data_base["@odata.type"] = "#microsoft.graph.windows10CustomConfiguration"
-        self.repo_data_base["omaSettings"] = [{
-            "isEncrypted": True,
-            "@odata.type": "#microsoft.graph.windows10OmaSetting",
-            "secretReferenceValueId": "0",
-            "omaUri": "test uri",
-            "displayName": "test",
-            "description": "",
-            "value": {
-                "@odata.context": "https://graph.microsoft.com/beta/$metadata#Edm.String",
-                "value": "password2"
-            }}]
+        self.repo_data_base["omaSettings"] = [
+            {
+                "isEncrypted": True,
+                "@odata.type": "#microsoft.graph.windows10OmaSetting",
+                "secretReferenceValueId": "0",
+                "omaUri": "test uri",
+                "displayName": "test",
+                "description": "",
+                "value": {"@odata.context": "https://graph.microsoft.com/beta/$metadata#Edm.String", "value": "password2"},
+            }
+        ]
 
         self.makeapirequest.side_effect = self.mem_data_base, self.oma_values
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -312,76 +315,78 @@ def test_update_custom_windows_with_diffs_no_assignment(self):
         """The count should be 1 and the makeapirequestPatch should be called."""
 
         self.mem_data_base["value"][0]["@odata.type"] = "#microsoft.graph.windows10CustomConfiguration"
-        self.mem_data_base["value"][0]["omaSettings"] = [{
-            "isEncrypted": True,
-            "@odata.type": "#microsoft.graph.windows10OmaSetting",
-            "secretReferenceValueId": "0",
-            "omaUri": "test uri",
-            "displayName": "test",
-            "description": "",
-            "value": {}}]
-
-        self.oma_values = {
-            '@odata.context': 'https://graph.microsoft.com/beta/$metadata#Edm.String',
-            'value': 'password'}
+        self.mem_data_base["value"][0]["omaSettings"] = [
+            {
+                "isEncrypted": True,
+                "@odata.type": "#microsoft.graph.windows10OmaSetting",
+                "secretReferenceValueId": "0",
+                "omaUri": "test uri",
+                "displayName": "test",
+                "description": "",
+                "value": {},
+            }
+        ]
+
+        self.oma_values = {"@odata.context": "https://graph.microsoft.com/beta/$metadata#Edm.String", "value": "password"}
 
         self.repo_data_base["@odata.type"] = "#microsoft.graph.windows10CustomConfiguration"
-        self.repo_data_base["omaSettings"] = [{
-            "isEncrypted": True,
-            "@odata.type": "#microsoft.graph.windows10OmaSetting",
-            "secretReferenceValueId": "0",
-            "omaUri": "test uri",
-            "displayName": "test",
-            "description": "",
-            "value": {
-                "@odata.context": "https://graph.microsoft.com/beta/$metadata#Edm.String",
-                "value": "password2"
-            }}]
+        self.repo_data_base["omaSettings"] = [
+            {
+                "isEncrypted": True,
+                "@odata.type": "#microsoft.graph.windows10OmaSetting",
+                "secretReferenceValueId": "0",
+                "omaUri": "test uri",
+                "displayName": "test",
+                "description": "",
+                "value": {"@odata.context": "https://graph.microsoft.com/beta/$metadata#Edm.String", "value": "password2"},
+            }
+        ]
 
         self.makeapirequest.side_effect = self.mem_data_base, self.oma_values
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_custom_windows_no_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update should be called,
-         and makeapirequestPatch should not be called."""
+        and makeapirequestPatch should not be called."""
 
         self.mem_data_base["value"][0]["@odata.type"] = "#microsoft.graph.windows10CustomConfiguration"
-        self.mem_data_base["value"][0]["omaSettings"] = [{
-            "isEncrypted": True,
-            "@odata.type": "#microsoft.graph.windows10OmaSetting",
-            "secretReferenceValueId": "0",
-            "omaUri": "test uri",
-            "displayName": "test",
-            "description": "",
-            "value": {}}]
-
-        self.oma_values = {
-            '@odata.context': 'https://graph.microsoft.com/beta/$metadata#Edm.String',
-            'value': 'password'}
+        self.mem_data_base["value"][0]["omaSettings"] = [
+            {
+                "isEncrypted": True,
+                "@odata.type": "#microsoft.graph.windows10OmaSetting",
+                "secretReferenceValueId": "0",
+                "omaUri": "test uri",
+                "displayName": "test",
+                "description": "",
+                "value": {},
+            }
+        ]
+
+        self.oma_values = {"@odata.context": "https://graph.microsoft.com/beta/$metadata#Edm.String", "value": "password"}
 
         self.repo_data_base["@odata.type"] = "#microsoft.graph.windows10CustomConfiguration"
-        self.repo_data_base["omaSettings"] = [{
-            "isEncrypted": True,
-            "@odata.type": "#microsoft.graph.windows10OmaSetting",
-            "secretReferenceValueId": "0",
-            "omaUri": "test uri",
-            "displayName": "test",
-            "description": "",
-            "value": {
-                "@odata.context": "https://graph.microsoft.com/beta/$metadata#Edm.String",
-                "value": "password"
-            }}]
+        self.repo_data_base["omaSettings"] = [
+            {
+                "isEncrypted": True,
+                "@odata.type": "#microsoft.graph.windows10OmaSetting",
+                "secretReferenceValueId": "0",
+                "omaUri": "test uri",
+                "displayName": "test",
+                "description": "",
+                "value": {"@odata.context": "https://graph.microsoft.com/beta/$metadata#Edm.String", "value": "password"},
+            }
+        ]
 
         self.makeapirequest.side_effect = self.mem_data_base, self.oma_values
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -389,37 +394,38 @@ def test_update_custom_windows_no_diffs_no_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPatch should not be called."""
 
         self.mem_data_base["value"][0]["@odata.type"] = "#microsoft.graph.windows10CustomConfiguration"
-        self.mem_data_base["value"][0]["omaSettings"] = [{
-            "isEncrypted": True,
-            "@odata.type": "#microsoft.graph.windows10OmaSetting",
-            "secretReferenceValueId": "0",
-            "omaUri": "test uri",
-            "displayName": "test",
-            "description": "",
-            "value": {}}]
-
-        self.oma_values = {
-            '@odata.context': 'https://graph.microsoft.com/beta/$metadata#Edm.String',
-            'value': 'password'}
+        self.mem_data_base["value"][0]["omaSettings"] = [
+            {
+                "isEncrypted": True,
+                "@odata.type": "#microsoft.graph.windows10OmaSetting",
+                "secretReferenceValueId": "0",
+                "omaUri": "test uri",
+                "displayName": "test",
+                "description": "",
+                "value": {},
+            }
+        ]
+
+        self.oma_values = {"@odata.context": "https://graph.microsoft.com/beta/$metadata#Edm.String", "value": "password"}
 
         self.repo_data_base["@odata.type"] = "#microsoft.graph.windows10CustomConfiguration"
-        self.repo_data_base["omaSettings"] = [{
-            "isEncrypted": True,
-            "@odata.type": "#microsoft.graph.windows10OmaSetting",
-            "secretReferenceValueId": "0",
-            "omaUri": "test uri",
-            "displayName": "test",
-            "description": "",
-            "value": {
-                "@odata.context": "https://graph.microsoft.com/beta/$metadata#Edm.String",
-                "value": "password"
-            }}]
+        self.repo_data_base["omaSettings"] = [
+            {
+                "isEncrypted": True,
+                "@odata.type": "#microsoft.graph.windows10OmaSetting",
+                "secretReferenceValueId": "0",
+                "omaUri": "test uri",
+                "displayName": "test",
+                "description": "",
+                "value": {"@odata.context": "https://graph.microsoft.com/beta/$metadata#Edm.String", "value": "password"},
+            }
+        ]
 
         self.makeapirequest.side_effect = self.mem_data_base, self.oma_values
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
@@ -432,7 +438,7 @@ def test_update_other_with_diffs_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -445,13 +451,13 @@ def test_update_other_with_diffs_no_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_other_no_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update should be called,
-         and makeapirequestPatch should not be called."""
+        and makeapirequestPatch should not be called."""
 
         self.mem_data_base["value"][0]["@odata.type"] = "#microsoft.graph.macOSConfiguration"
         self.mem_data_base["value"][0]["testvalue"] = "test1"
@@ -460,7 +466,7 @@ def test_update_other_no_diffs_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -474,7 +480,7 @@ def test_update_other_no_diffs_no_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
@@ -485,7 +491,7 @@ def test_update_config_not_found_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count, [])
         self.assertEqual(self.makeapirequestPost.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -495,24 +501,24 @@ def test_update_custom_windows_config_not_found_and_assignment(self):
         self.mem_data_base["value"][0]["displayName"] = "test1"
 
         self.repo_data_base["@odata.type"] = "#microsoft.graph.windows10CustomConfiguration"
-        self.repo_data_base["omaSettings"] = [{
-            "isEncrypted": True,
-            "@odata.type": "#microsoft.graph.windows10OmaSetting",
-            "secretReferenceValueId": "0",
-            "omaUri": "test uri",
-            "displayName": "test",
-            "description": "",
-            "value": {
-                "@odata.context": "https://graph.microsoft.com/beta/$metadata#Edm.String",
-                "value": "password2"
-            }}]
+        self.repo_data_base["omaSettings"] = [
+            {
+                "isEncrypted": True,
+                "@odata.type": "#microsoft.graph.windows10OmaSetting",
+                "secretReferenceValueId": "0",
+                "omaUri": "test uri",
+                "displayName": "test",
+                "description": "",
+                "value": {"@odata.context": "https://graph.microsoft.com/beta/$metadata#Edm.String", "value": "password2"},
+            }
+        ]
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count, [])
         self.assertEqual(self.makeapirequestPost.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Update/test_update_shellScripts.py b/tests/Update/test_update_shellScripts.py
index 5386ddd7..d53c5b92 100644
--- a/tests/Update/test_update_shellScripts.py
+++ b/tests/Update/test_update_shellScripts.py
@@ -17,14 +17,9 @@ def setUp(self):
         self.directory.create()
         self.directory.makedir("Scripts/Shell")
         self.directory.makedir("Scripts/Shell/Script Data")
-        self.directory.write(
-            "Scripts/Shell/test.json", '{"test": "test"}',
-            encoding='utf-8')
-        self.directory.write(
-            "Scripts/Shell/Script Data/test.sh",
-            'You found a secret message, hooray!',
-            encoding='utf-8')
-        self.token = 'token'
+        self.directory.write("Scripts/Shell/test.json", '{"test": "test"}', encoding="utf-8")
+        self.directory.write("Scripts/Shell/Script Data/test.sh", "You found a secret message, hooray!", encoding="utf-8")
+        self.token = "token"
         self.mem_script_content = "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2Us"
         self.repo_script_content = "WW91IGZvdW5kIGEgc2VjcmV0IG1lc3NhZ2UsIGhvb3JheSE="
         self.mem_shellScript_data = {
@@ -36,57 +31,53 @@ def setUp(self):
                     "testvalue": "test",
                     "scriptContent": self.mem_script_content,
                     "fileName": "test.sh",
-                    "assignments": [
-                        {
-                            "target": {
-                                "groupId": "test"}}]}]}
-        self.mem_data = {"@odata.type": "test",
-                         "id": "0",
-                         "displayName": "test",
-                         "testvalue": "test",
-                         "scriptContent": self.mem_script_content,
-                         "fileName": "test.sh",
-                         "assignments": [{"target": {"groupId": "test"}}]}
-        self.repo_data = {"@odata.type": "test",
-                          "id": "0",
-                          "displayName": "test",
-                          "testvalue": "test",
-                          "scriptContent": self.repo_script_content,
-                          "fileName": "test.sh",
-                          "assignments": [{"target": {"groupId": "test"}}]}
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.update_shellScripts.batch_assignment')
+                    "assignments": [{"target": {"groupId": "test"}}],
+                }
+            ]
+        }
+        self.mem_data = {
+            "@odata.type": "test",
+            "id": "0",
+            "displayName": "test",
+            "testvalue": "test",
+            "scriptContent": self.mem_script_content,
+            "fileName": "test.sh",
+            "assignments": [{"target": {"groupId": "test"}}],
+        }
+        self.repo_data = {
+            "@odata.type": "test",
+            "id": "0",
+            "displayName": "test",
+            "testvalue": "test",
+            "scriptContent": self.repo_script_content,
+            "fileName": "test.sh",
+            "assignments": [{"target": {"groupId": "test"}}],
+        }
+
+        self.batch_assignment_patch = patch("src.IntuneCD.update_shellScripts.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.update_shellScripts.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.update_shellScripts.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.update_shellScripts.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.update_shellScripts.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
-        self.update_assignment_patch = patch(
-            'src.IntuneCD.update_shellScripts.update_assignment')
+        self.update_assignment_patch = patch("src.IntuneCD.update_shellScripts.update_assignment")
         self.update_assignment = self.update_assignment_patch.start()
 
-        self.load_file_patch = patch(
-            'src.IntuneCD.update_shellScripts.load_file')
+        self.load_file_patch = patch("src.IntuneCD.update_shellScripts.load_file")
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
-        self.post_assignment_update_patch = patch(
-            'src.IntuneCD.update_shellScripts.post_assignment_update')
+        self.post_assignment_update_patch = patch("src.IntuneCD.update_shellScripts.post_assignment_update")
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
-        self.makeapirequestPatch_patch = patch(
-            'src.IntuneCD.update_shellScripts.makeapirequestPatch')
+        self.makeapirequestPatch_patch = patch("src.IntuneCD.update_shellScripts.makeapirequestPatch")
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
-        self.makeapirequestPost_patch = patch(
-            'src.IntuneCD.update_shellScripts.makeapirequestPost')
+        self.makeapirequestPost_patch = patch("src.IntuneCD.update_shellScripts.makeapirequestPost")
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
@@ -104,57 +95,53 @@ def tearDown(self):
     def test_update_with_diffs_and_assignment(self):
         """The count should be 1 and the post_assignment_update and makeapirequestPatch should be called."""
 
-        self.repo_data['testvalue'] = "test1"
-        self.makeapirequest.side_effect = [
-            self.mem_shellScript_data, self.mem_data]
+        self.repo_data["testvalue"] = "test1"
+        self.makeapirequest.side_effect = [self.mem_shellScript_data, self.mem_data]
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 2)
+        self.assertEqual(self.count[0].count, 2)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_with_diffs_no_assignment(self):
         """The count should be 1 and the makeapirequestPatch should be called."""
 
-        self.repo_data['testvalue'] = "test1"
-        self.makeapirequest.side_effect = [
-            self.mem_shellScript_data, self.mem_data]
+        self.repo_data["testvalue"] = "test1"
+        self.makeapirequest.side_effect = [self.mem_shellScript_data, self.mem_data]
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 2)
+        self.assertEqual(self.count[0].count, 2)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_with_no_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update should be called,
-         and makeapirequestPatch should not be called."""
+        and makeapirequestPatch should not be called."""
 
-        self.mem_data['testvalue'] = "test"
-        self.mem_data['scriptContent'] = self.repo_script_content
+        self.mem_data["testvalue"] = "test"
+        self.mem_data["scriptContent"] = self.repo_script_content
 
-        self.makeapirequest.side_effect = [
-            self.mem_shellScript_data, self.mem_data]
+        self.makeapirequest.side_effect = [self.mem_shellScript_data, self.mem_data]
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
     def test_update_with_no_diffs_no_assignment(self):
         """The count should be 0, the post_assignment_update and makeapirequestPatch should not be called."""
 
-        self.mem_data['testvalue'] = "test"
-        self.mem_data['scriptContent'] = self.repo_script_content
+        self.mem_data["testvalue"] = "test"
+        self.mem_data["scriptContent"] = self.repo_script_content
 
-        self.makeapirequest.side_effect = [
-            self.mem_shellScript_data, self.mem_data]
+        self.makeapirequest.side_effect = [self.mem_shellScript_data, self.mem_data]
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
@@ -166,10 +153,10 @@ def test_update_config_not_found_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count, [])
         self.assertEqual(self.makeapirequestPost.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/Update/test_update_windowsEnrollmentProfile.py b/tests/Update/test_update_windowsEnrollmentProfile.py
index 92e600db..0e43cdc9 100644
--- a/tests/Update/test_update_windowsEnrollmentProfile.py
+++ b/tests/Update/test_update_windowsEnrollmentProfile.py
@@ -16,54 +16,52 @@ def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
         self.directory.makedir("Enrollment Profiles/Windows")
-        self.directory.write(
-            "Enrollment Profiles/Windows/test.json", '{"test": "test"}',
-            encoding='utf-8')
-        self.token = 'token'
-        self.mem_data = {"value": [{"@odata.type": "test",
-                                    "id": "0",
-                                    "displayName": "test",
-                                    "testvalue": "test",
-                                    "assignments": [{"target": {"groupId": "test"}}]}]}
-        self.repo_data = {"@odata.type": "test",
-                          "id": "0",
-                          "displayName": "test",
-                          "testvalue": "test1",
-                          "managementServiceAppId": "0",
-                          "assignments": [{"target": {"groupName": "test1"}}]}
-
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.update_windowsEnrollmentProfile.batch_assignment')
+        self.directory.write("Enrollment Profiles/Windows/test.json", '{"test": "test"}', encoding="utf-8")
+        self.token = "token"
+        self.mem_data = {
+            "value": [
+                {
+                    "@odata.type": "test",
+                    "id": "0",
+                    "displayName": "test",
+                    "testvalue": "test",
+                    "assignments": [{"target": {"groupId": "test"}}],
+                }
+            ]
+        }
+        self.repo_data = {
+            "@odata.type": "test",
+            "id": "0",
+            "displayName": "test",
+            "testvalue": "test1",
+            "managementServiceAppId": "0",
+            "assignments": [{"target": {"groupName": "test1"}}],
+        }
+
+        self.batch_assignment_patch = patch("src.IntuneCD.update_windowsEnrollmentProfile.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
 
-        self.object_assignment_patch = patch(
-            'src.IntuneCD.update_windowsEnrollmentProfile.get_object_assignment')
+        self.object_assignment_patch = patch("src.IntuneCD.update_windowsEnrollmentProfile.get_object_assignment")
         self.object_assignment = self.object_assignment_patch.start()
 
-        self.makeapirequest_patch = patch(
-            'src.IntuneCD.update_windowsEnrollmentProfile.makeapirequest')
+        self.makeapirequest_patch = patch("src.IntuneCD.update_windowsEnrollmentProfile.makeapirequest")
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
-        self.update_assignment_patch = patch(
-            'src.IntuneCD.update_windowsEnrollmentProfile.update_assignment')
+        self.update_assignment_patch = patch("src.IntuneCD.update_windowsEnrollmentProfile.update_assignment")
         self.update_assignment = self.update_assignment_patch.start()
 
-        self.load_file_patch = patch(
-            'src.IntuneCD.update_windowsEnrollmentProfile.load_file')
+        self.load_file_patch = patch("src.IntuneCD.update_windowsEnrollmentProfile.load_file")
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
-        self.post_assignment_update_patch = patch(
-            'src.IntuneCD.update_windowsEnrollmentProfile.post_assignment_update')
+        self.post_assignment_update_patch = patch("src.IntuneCD.update_windowsEnrollmentProfile.post_assignment_update")
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
-        self.makeapirequestPatch_patch = patch(
-            'src.IntuneCD.update_windowsEnrollmentProfile.makeapirequestPatch')
+        self.makeapirequestPatch_patch = patch("src.IntuneCD.update_windowsEnrollmentProfile.makeapirequestPatch")
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
-        self.makeapirequestPost_patch = patch(
-            'src.IntuneCD.update_windowsEnrollmentProfile.makeapirequestPost')
+        self.makeapirequestPost_patch = patch("src.IntuneCD.update_windowsEnrollmentProfile.makeapirequestPost")
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
@@ -83,7 +81,7 @@ def test_update_with_diffs_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -92,19 +90,19 @@ def test_update_with_diffs_no_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 1)
+        self.assertEqual(self.count[0].count, 1)
         self.assertEqual(self.makeapirequestPatch.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
     def test_update_with_no_diffs_and_assignment(self):
         """The count should be 0, the post_assignment_update should be called,
-         and makeapirequestPatch should not be called."""
+        and makeapirequestPatch should not be called."""
 
         self.mem_data["value"][0]["testvalue"] = "test1"
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
@@ -115,7 +113,7 @@ def test_update_with_no_diffs_no_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=False)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count[0].count, 0)
         self.assertEqual(self.makeapirequestPatch.call_count, 0)
         self.assertEqual(self.post_assignment_update.call_count, 0)
 
@@ -126,10 +124,10 @@ def test_update_config_not_found_and_assignment(self):
 
         self.count = update(self.directory.path, self.token, assignment=True)
 
-        self.assertEqual(self.count, 0)
+        self.assertEqual(self.count, [])
         self.assertEqual(self.makeapirequestPost.call_count, 1)
         self.assertEqual(self.post_assignment_update.call_count, 1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/__init__.py b/tests/__init__.py
index 4f8ece32..bbb1646f 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -1,8 +1,6 @@
 import os
 import sys
+
 PROJECT_PATH = os.getcwd()
-SOURCE_PATH = os.path.join(
-    PROJECT_PATH, "src"
-)
+SOURCE_PATH = os.path.join(PROJECT_PATH, "src")
 sys.path.append(SOURCE_PATH)
-
diff --git a/tests/test_check_file.py b/tests/test_check_file.py
index a7ef8219..f63886b1 100644
--- a/tests/test_check_file.py
+++ b/tests/test_check_file.py
@@ -22,13 +22,10 @@ def setUp(self):
         self.DS_Store = ".DS_Store"
         self.d = self.directory.makedir("fake_path")
 
-        self.yaml_file = self.directory.write(
-            self.yaml, "yaml", encoding="utf-8")
-        self.json_file = self.directory.write(
-            self.json, '{"data": "fake_data"}', encoding="utf-8")
+        self.yaml_file = self.directory.write(self.yaml, "yaml", encoding="utf-8")
+        self.json_file = self.directory.write(self.json, '{"data": "fake_data"}', encoding="utf-8")
         self.md_file = self.directory.write(self.md, "md", encoding="utf-8")
-        self.DS_Store_file = self.directory.write(
-            self.DS_Store, "DS_Store", encoding="utf-8")
+        self.DS_Store_file = self.directory.write(self.DS_Store, "DS_Store", encoding="utf-8")
 
     def tearDown(self):
         self.directory.cleanup()
@@ -59,5 +56,5 @@ def test_check_dir(self):
         self.assertFalse(self.check)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/test_clean_filename.py b/tests/test_clean_filename.py
index 03c47009..5cf737e3 100644
--- a/tests/test_clean_filename.py
+++ b/tests/test_clean_filename.py
@@ -29,5 +29,5 @@ def test_clean_filename_list(self):
         self.assertEqual(result, "['test_file_name', 'test_file_name']")
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/test_diff_summary.py b/tests/test_diff_summary.py
new file mode 100644
index 00000000..1a8f1d1f
--- /dev/null
+++ b/tests/test_diff_summary.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python3
+
+"""
+This module tests the get_diff_output function.
+"""
+
+import unittest
+
+from src.IntuneCD.diff_summary import DiffSummary
+from unittest.mock import patch
+
+
+@patch("src.IntuneCD.diff_summary.datetime", return_value="2021-01-01 00:00:00")
+class TestGetDiffOutput(unittest.TestCase):
+    """Test class for get_diff_output."""
+
+    def test_get_diff_output_single(self, mock_datetime):
+        """Should return a list of dicts with the setting, new value and old value."""
+        diff = {"root['cameraBlocked']": {"new_value": True, "old_value": False}}
+
+        self.output = DiffSummary(data=diff, name="Test", type="configurationProfile")
+
+        self.assertEqual(
+            self.output.diffs,
+            [
+                {
+                    "new_val": "True",
+                    "old_val": "False",
+                    "setting": "cameraBlocked",
+                    "change_date": str(mock_datetime.now().strftime("%Y-%m-%d %H:%M:%S")),
+                }
+            ],
+        )
+
+    def test_get_diff_output_multiple(self, mock_datetime):
+        """Should return a list of dicts with the settings, new values and old values."""
+        diff = {
+            "root['cameraBlocked']": {"new_value": True, "old_value": False},
+            "root['cameraBlocked2']": {"new_value": True, "old_value": False},
+        }
+
+        self.output = DiffSummary(data=diff, name="Test", type="configurationProfile")
+
+        self.assertEqual(
+            self.output.diffs,
+            [
+                {
+                    "new_val": "True",
+                    "old_val": "False",
+                    "setting": "cameraBlocked",
+                    "change_date": str(mock_datetime.now().strftime("%Y-%m-%d %H:%M:%S")),
+                },
+                {
+                    "new_val": "True",
+                    "old_val": "False",
+                    "setting": "cameraBlocked2",
+                    "change_date": str(mock_datetime.now().strftime("%Y-%m-%d %H:%M:%S")),
+                },
+            ],
+        )
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/test_documentation_functions.py b/tests/test_documentation_functions.py
index 3468b91e..464840c6 100644
--- a/tests/test_documentation_functions.py
+++ b/tests/test_documentation_functions.py
@@ -2,18 +2,19 @@
 from pathlib import Path
 
 from testfixtures import TempDirectory
-from src.IntuneCD.documentation_functions import md_file, \
-    write_table, \
-    assignment_table, \
-    remove_characters, \
-    clean_list, \
-    document_configs, \
-    document_management_intents, \
-    get_md_files
+from src.IntuneCD.documentation_functions import (
+    md_file,
+    write_table,
+    assignment_table,
+    remove_characters,
+    clean_list,
+    document_configs,
+    document_management_intents,
+    get_md_files,
+)
 
 
 class TestDocumentationFunctions(unittest.TestCase):
-
     def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
@@ -27,8 +28,7 @@ def test_md_file_does_not_exist(self):
         """The md file should be returned."""
         md_file(f"{self.directory.path}/test_file_name.md")
 
-        self.assertTrue(
-            Path(f"{self.directory.path}/test_file_name.md").exists())
+        self.assertTrue(Path(f"{self.directory.path}/test_file_name.md").exists())
 
     def test_md_file_exists(self):
         """The md file should be returned."""
@@ -36,66 +36,66 @@ def test_md_file_exists(self):
 
         md_file(f"{self.directory.path}/test_file_name.md")
         with open(f"{self.directory.path}/test_file_name.md", "r") as f:
-            self.assertEqual(f.read(), '')
+            self.assertEqual(f.read(), "")
 
     def test_write_table(self):
         """The table should be returned."""
-        self.table_data = [['test', 'test'], ['test', 'test']]
-        self.expected_table = '|setting|value||-------|-----||test   |test ||test   |test |'
+        self.table_data = [["test", "test"], ["test", "test"]]
+        self.expected_table = "|setting|value||-------|-----||test   |test ||test   |test |"
 
         self.result = write_table(self.table_data)
         self.string = str(self.result)
 
-        self.assertEqual(
-            ''.join(
-                self.string.splitlines()),
-            self.expected_table)
+        self.assertEqual("".join(self.string.splitlines()), self.expected_table)
 
     def test_assignment_table(self):
         """The table should be returned."""
         self.table_data = {
-            'assignments': [
+            "assignments": [
                 {
-                    'intent': 'apply',
-                    'target': {
-                        '@odata.type': "#test",
-                        'groupName': 'test-group',
-                        'deviceAndAppManagementAssignmentFilterId': 'test-filter',
-                        'deviceAndAppManagementAssignmentFilterType': 'test'}}]}
-        self.expected_table = '|intent|  target  |filter type|filter name||------|----------|-----------|-----------||apply |test-group|test       |test-filter|'
+                    "intent": "apply",
+                    "target": {
+                        "@odata.type": "#test",
+                        "groupName": "test-group",
+                        "deviceAndAppManagementAssignmentFilterId": "test-filter",
+                        "deviceAndAppManagementAssignmentFilterType": "test",
+                    },
+                }
+            ]
+        }
+        self.expected_table = "|intent|  target  |filter type|filter name||------|----------|-----------|-----------||apply |test-group|test       |test-filter|"
 
         self.result = assignment_table(self.table_data)
         self.string = str(self.result)
 
-        self.assertEqual(''.join(
-            self.string.splitlines()), self.expected_table)
+        self.assertEqual("".join(self.string.splitlines()), self.expected_table)
 
     def test_remove_characters(self):
         """The string should be returned."""
-        self.string = '@[test]{}'
+        self.string = "@[test]{}"
 
-        self.assertEqual(remove_characters(self.string), 'test')
+        self.assertEqual(remove_characters(self.string), "test")
 
     def test_clean_list_list(self):
         """The list should be returned."""
-        self.list = [{'teamIdentifier': 'test', 'bundleId': 'test'}]
-        self.expected_list = ['**teamIdentifier:** test</br>**bundleId:** test</br>']
+        self.list = [{"teamIdentifier": "test", "bundleId": "test"}]
+        self.expected_list = ["**teamIdentifier:** test</br>**bundleId:** test</br>"]
         self.result = clean_list(self.list)
 
         self.assertEqual(self.result, self.expected_list)
 
     def test_clean_list_dict(self):
         """The list should be returned."""
-        self.dict = {'appName': 'test', 'type': '#microsoft.graph.iosVppApp'}
-        self.expected_list = ['appName', 'type']
+        self.dict = {"appName": "test", "type": "#microsoft.graph.iosVppApp"}
+        self.expected_list = ["appName", "type"]
         self.result = clean_list(self.dict)
 
         self.assertEqual(self.result, self.expected_list)
 
     def test_clean_list_string(self):
         """The list should be returned."""
-        self.string = ['test']
-        self.expected_list = ['test']
+        self.string = ["test"]
+        self.expected_list = ["test"]
         self.result = clean_list(self.string)
 
         self.assertEqual(self.result, self.expected_list)
@@ -105,20 +105,17 @@ def test_document_configs(self):
         self.directory.write(
             "config/test_file_name.json",
             '{"@odata.type":"test","test":"test","name":"test","description":"test","testvals":"1,2","testbool":false,"testlist":["test"],"testlistdict":[{"test":{"test":{"test":["1"]}}}],"testdict2":{"test":{"test":{"test":["1"]}}},"testdictlist":{"test":["a","b","c"]},"assignments":[{"intent":"apply","target":{"@odata.type":"#test","groupName":"test-group","deviceAndAppManagementAssignmentFilterId":"test-filter","deviceAndAppManagementAssignmentFilterType":"test"}}]}',
-            encoding="utf-8")
-        self.expected_data = '#test##testDescription:test###Assignments|intent|target|filtertype|filtername||------|----------|-----------|-----------||apply|test-group|test|test-filter||setting|value||------------|-------------------------------------------------------||Odatatype|test||Test|test||Name|test||Testvals|1,2||Testbool|False||Testlist|test<br/>||Testlistdict|**test:**<ul>**test:**<ul><li>1</li></ul></ul><br/>||Testdict2|**test**<ul>**test:**<ul><li>1</li></ul><br/></ul>||Testdictlist|**test:**<ul><li>a</li><li>b</li><li>c</li></ul>|'
+            encoding="utf-8",
+        )
+        self.expected_data = "#test##testDescription:test###Assignments|intent|target|filtertype|filtername||------|----------|-----------|-----------||apply|test-group|test|test-filter||setting|value||------------|-------------------------------------------------------||Odatatype|test||Test|test||Name|test||Testvals|1,2||Testbool|False||Testlist|test<br/>||Testlistdict|**test:**<ul>**test:**<ul><li>1</li></ul></ul><br/>||Testdict2|**test**<ul>**test:**<ul><li>1</li></ul><br/></ul>||Testdictlist|**test:**<ul><li>a</li><li>b</li><li>c</li></ul>|"
 
         document_configs(
-            f"{self.directory.path}/config",
-            f"{self.directory.path}/test.md",
-            'test',
-            100,
-            split=False,
-            cleanup=True)
-            
+            f"{self.directory.path}/config", f"{self.directory.path}/test.md", "test", 100, split=False, cleanup=True
+        )
+
         with open(f"{self.directory.path}/test.md", "r") as f:
             self.data = f.read()
-            self.result = ''.join([line.strip() for line in self.data])
+            self.result = "".join([line.strip() for line in self.data])
 
         self.assertEqual(self.result, self.expected_data)
 
@@ -127,17 +124,14 @@ def test_document_management_intents(self):
         self.directory.write(
             "intent/test/test_file_name.json",
             '{"test": "test", "name": "test", "description": "test", "settingsDelta": [{"test": "test", "definitionId": "deviceConfiguration--macOSEndpointProtectionConfiguration_fileVaultNumberOfTimesUserCanIgnore","valueJson": "1","value": 1}], "assignments": [{"intent": "apply", "target": {"@odata.type": "#test", "groupName": "test-group", "deviceAndAppManagementAssignmentFilterId": "test-filter", "deviceAndAppManagementAssignmentFilterType": "test"}}]}',
-            encoding="utf-8")
-        self.expected_data = '#intent##testDescription:test###Assignments|intent|target|filtertype|filtername||------|----------|-----------|-----------||apply|test-group|test|test-filter||setting|value||------------------------------------------|-----||Test|test||Name|test||FileVaultNumberOfTimesUserCanIgnore|1|'
-
-        document_management_intents(
-            f"{self.directory.path}/intent/",
-            f"{self.directory.path}/test.md",
-            'intent',
-            split=False)
+            encoding="utf-8",
+        )
+        self.expected_data = "#intent##testDescription:test###Assignments|intent|target|filtertype|filtername||------|----------|-----------|-----------||apply|test-group|test|test-filter||setting|value||------------------------------------------|-----||Test|test||Name|test||FileVaultNumberOfTimesUserCanIgnore|1|"
+
+        document_management_intents(f"{self.directory.path}/intent/", f"{self.directory.path}/test.md", "intent", split=False)
         with open(f"{self.directory.path}/test.md", "r") as f:
             self.data = f.read()
-            self.result = ''.join([line.strip() for line in self.data])
+            self.result = "".join([line.strip() for line in self.data])
 
         self.assertEqual(self.result, self.expected_data)
 
@@ -146,8 +140,8 @@ def test_get_md_files(self):
         self.directory.write("config/test_file_name.md", "md", encoding="utf-8")
 
         md_file(f"{self.directory.path}/config/test_file_name.md")
-        #get_md_files(f"{self.directory.path}/")
+        # get_md_files(f"{self.directory.path}/")
 
-        self.expected_list = ['./config/test_file_name.md']
+        self.expected_list = ["./config/test_file_name.md"]
 
-        self.assertEqual(get_md_files(self.directory.path), self.expected_list)
\ No newline at end of file
+        self.assertEqual(get_md_files(self.directory.path), self.expected_list)
diff --git a/tests/test_get_added_removed.py b/tests/test_get_added_removed.py
index 84db821e..ec895122 100644
--- a/tests/test_get_added_removed.py
+++ b/tests/test_get_added_removed.py
@@ -15,19 +15,20 @@ class TestCleanFilename(unittest.TestCase):
     def test_get_added_removed(self):
         """The list of added and removed should be returned."""
         self.object = {
-            'assignments': {
-                'intent': 'apply',
-                'target': {
-                    '@odata.type': '#microsoft.graph.allDevicesAssignmentTarget',
-                    'deviceAndAppManagementAssignmentFilterId': "1234",
-                    'deviceAndAppManagementAssignmentFilterType': 'device'}}}
+            "assignments": {
+                "intent": "apply",
+                "target": {
+                    "@odata.type": "#microsoft.graph.allDevicesAssignmentTarget",
+                    "deviceAndAppManagementAssignmentFilterId": "1234",
+                    "deviceAndAppManagementAssignmentFilterType": "device",
+                },
+            }
+        }
 
         result = get_added_removed(self.object)
 
-        self.assertEqual(
-            result,
-            ['intent: apply, Filter ID: 1234, Filter Type: device, target: All Devices'])
+        self.assertEqual(result, ["intent: apply, Filter ID: 1234, Filter Type: device, target: All Devices"])
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/test_get_authparams.py b/tests/test_get_authparams.py
index a36f1d4e..aef0b9a6 100644
--- a/tests/test_get_authparams.py
+++ b/tests/test_get_authparams.py
@@ -11,8 +11,8 @@
 from src.IntuneCD.get_authparams import getAuth
 
 
-@patch('src.IntuneCD.get_authparams.getAuth')
-@patch('src.IntuneCD.get_authparams.obtain_accesstoken', return_value="token")
+@patch("src.IntuneCD.get_authparams.getAuth")
+@patch("src.IntuneCD.get_authparams.obtain_accesstoken", return_value="token")
 class TestGetAuth(unittest.TestCase):
     """Test class for get_auth."""
 
@@ -20,90 +20,76 @@ def setUp(self):
         self.directory = TempDirectory()
         self.directory.create()
         self.directory.write(
-            'auth_dev.json',
+            "auth_dev.json",
             '{"params": {"DEV_CLIENT_ID": "test", "DEV_CLIENT_SECRET": "test", "DEV_TENANT_NAME": "test"}}',
-            encoding='utf-8')
+            encoding="utf-8",
+        )
         self.directory.write(
-            'auth_prod.json',
+            "auth_prod.json",
             '{"params": {"PROD_CLIENT_ID": "test", "PROD_CLIENT_SECRET": "test", "PROD_TENANT_NAME": "test"}}',
-            encoding='utf-8')
+            encoding="utf-8",
+        )
         self.directory.write(
-            'auth.json',
-            '{"params": {"CLIENT_ID": "test", "CLIENT_SECRET": "test", "TENANT_NAME": "test"}}',
-            encoding='utf-8')
-        self.auth_dev_json = self.directory.path + '/auth_dev.json'
-        self.auth_prod_json = self.directory.path + '/auth_prod.json'
-        self.auth_json = self.directory.path + '/auth.json'
+            "auth.json", '{"params": {"CLIENT_ID": "test", "CLIENT_SECRET": "test", "TENANT_NAME": "test"}}', encoding="utf-8"
+        )
+        self.auth_dev_json = self.directory.path + "/auth_dev.json"
+        self.auth_prod_json = self.directory.path + "/auth_prod.json"
+        self.auth_json = self.directory.path + "/auth.json"
 
     def tearDown(self):
         self.directory.cleanup()
 
-    def test_get_auth_devtoprod_env_dev(
-            self, mock_getAuth, mock_obtain_accesstoken):
+    def test_get_auth_devtoprod_env_dev(self, mock_getAuth, mock_obtain_accesstoken):
         """The auth params should be returned."""
-        with patch.dict('os.environ', {'DEV_CLIENT_ID': 'test', 'DEV_CLIENT_SECRET': 'test', 'DEV_TENANT_NAME': 'test'}):
-            result = getAuth('devtoprod', localauth=None, tenant='DEV')
+        with patch.dict("os.environ", {"DEV_CLIENT_ID": "test", "DEV_CLIENT_SECRET": "test", "DEV_TENANT_NAME": "test"}):
+            result = getAuth("devtoprod", localauth=None, tenant="DEV")
             self.assertEqual(result, "token")
 
-    def test_get_auth_devtoprod_env_prod(
-            self, mock_getAuth, mock_obtain_accesstoken):
+    def test_get_auth_devtoprod_env_prod(self, mock_getAuth, mock_obtain_accesstoken):
         """The auth params should be returned."""
-        with patch.dict('os.environ', {'PROD_CLIENT_ID': 'test', 'PROD_CLIENT_SECRET': 'test', 'PROD_TENANT_NAME': 'test'}):
-            result = getAuth('devtoprod', localauth=None, tenant='PROD')
+        with patch.dict("os.environ", {"PROD_CLIENT_ID": "test", "PROD_CLIENT_SECRET": "test", "PROD_TENANT_NAME": "test"}):
+            result = getAuth("devtoprod", localauth=None, tenant="PROD")
             self.assertEqual(result, "token")
 
-    def test_get_auth_devtoprod_localauth_dev(
-            self, mock_getAuth, mock_obtain_accesstoken):
+    def test_get_auth_devtoprod_localauth_dev(self, mock_getAuth, mock_obtain_accesstoken):
         """The auth params should be returned."""
-        result = getAuth(
-            'devtoprod',
-            localauth=self.auth_dev_json,
-            tenant='DEV')
+        result = getAuth("devtoprod", localauth=self.auth_dev_json, tenant="DEV")
         self.assertEqual(result, "token")
 
-    def test_get_auth_devtoprod_localauth_prod(
-            self, mock_getAuth, mock_obtain_accesstoken):
+    def test_get_auth_devtoprod_localauth_prod(self, mock_getAuth, mock_obtain_accesstoken):
         """The auth params should be returned."""
-        result = getAuth(
-            'devtoprod',
-            localauth=self.auth_prod_json,
-            tenant='PROD')
+        result = getAuth("devtoprod", localauth=self.auth_prod_json, tenant="PROD")
         self.assertEqual(result, "token")
 
-    def test_get_auth_standalone_env(
-            self, mock_getAuth, mock_obtain_accesstoken):
+    def test_get_auth_standalone_env(self, mock_getAuth, mock_obtain_accesstoken):
         """The auth params should be returned."""
-        with patch.dict('os.environ', {'CLIENT_ID': 'test', 'CLIENT_SECRET': 'test', 'TENANT_NAME': 'test'}):
-            result = getAuth('standalone', localauth=None, tenant=None)
+        with patch.dict("os.environ", {"CLIENT_ID": "test", "CLIENT_SECRET": "test", "TENANT_NAME": "test"}):
+            result = getAuth("standalone", localauth=None, tenant=None)
             self.assertEqual(result, "token")
 
-    def test_get_auth_standalone_localauth(
-            self, mock_getAuth, mock_obtain_accesstoken):
+    def test_get_auth_standalone_localauth(self, mock_getAuth, mock_obtain_accesstoken):
         """The auth params should be returned."""
-        result = getAuth('standalone', localauth=self.auth_json, tenant=None)
+        result = getAuth("standalone", localauth=self.auth_json, tenant=None)
         self.assertEqual(result, "token")
 
-    def test_get_auth_devtoprod_missing_env_dev(
-            self, mock_getAuth, mock_obtain_accesstoken):
+    def test_get_auth_devtoprod_missing_env_dev(self, mock_getAuth, mock_obtain_accesstoken):
         """Exception should be raised due to missing env."""
-        with patch.dict('os.environ', {'DEV_CLIENT_ID': 'test', 'DEV_CLIENT_SECRET': 'test'}):
+        with patch.dict("os.environ", {"DEV_CLIENT_ID": "test", "DEV_CLIENT_SECRET": "test"}):
             with self.assertRaises(Exception):
-                getAuth('devtoprod', localauth=None, tenant='DEV')
+                getAuth("devtoprod", localauth=None, tenant="DEV")
 
-    def test_get_auth_devtoprod_missing_env_prod(
-            self, mock_getAuth, mock_obtain_accesstoken):
+    def test_get_auth_devtoprod_missing_env_prod(self, mock_getAuth, mock_obtain_accesstoken):
         """Exception should be raised due to missing env."""
-        with patch.dict('os.environ', {'PROD_CLIENT_ID': 'test', 'PROD_CLIENT_SECRET': 'test'}):
+        with patch.dict("os.environ", {"PROD_CLIENT_ID": "test", "PROD_CLIENT_SECRET": "test"}):
             with self.assertRaises(Exception):
-                getAuth('devtoprod', localauth=None, tenant='PROD')
+                getAuth("devtoprod", localauth=None, tenant="PROD")
 
-    def test_get_auth_standalone_missing_env(
-            self, mock_getAuth, mock_obtain_accesstoken):
+    def test_get_auth_standalone_missing_env(self, mock_getAuth, mock_obtain_accesstoken):
         """Exception should be raised due to missing env."""
-        with patch.dict('os.environ', {'CLIENT_ID': 'test', 'CLIENT_SECRET': 'test'}):
+        with patch.dict("os.environ", {"CLIENT_ID": "test", "CLIENT_SECRET": "test"}):
             with self.assertRaises(Exception):
-                getAuth('standalone', localauth=None, tenant=None)
+                getAuth("standalone", localauth=None, tenant=None)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/test_get_diff_output.py b/tests/test_get_diff_output.py
deleted file mode 100644
index bed2919e..00000000
--- a/tests/test_get_diff_output.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env python3
-
-"""
-This module tests the get_diff_output function.
-"""
-
-import unittest
-
-from src.IntuneCD.get_diff_output import get_diff_output
-
-
-class TestGetDiffOutput(unittest.TestCase):
-    """Test class for get_diff_output."""
-
-    def test_get_diff_output_single(self):
-        """Should return a list with the setting, new value and old value."""
-        diff = {
-            "root['cameraBlocked']": {
-                'new_value': True,
-                'old_value': False}}
-
-        self.output = get_diff_output(diff)
-
-        self.assertEqual(
-            self.output,
-            ["Setting: 'cameraBlocked', New Value: True, Old Value: False"])
-
-    def test_get_diff_output_multiple(self):
-        """Should return a list with the settings, new values and old values."""
-        diff = {
-            "root['cameraBlocked']": {
-                'new_value': True,
-                'old_value': False},
-            "root['cameraBlocked2']": {
-                'new_value': True,
-                'old_value': False}}
-
-        self.output = get_diff_output(diff)
-
-        self.assertEqual(
-            self.output,
-            ["Setting: 'cameraBlocked', New Value: True, Old Value: False",
-             "Setting: 'cameraBlocked2', New Value: True, Old Value: False"])
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/tests/test_graph_batch.py b/tests/test_graph_batch.py
index ec842f28..ad99f25c 100644
--- a/tests/test_graph_batch.py
+++ b/tests/test_graph_batch.py
@@ -7,73 +7,59 @@
 import unittest
 
 from unittest.mock import patch
-from src.IntuneCD.graph_batch import batch_request, \
-    batch_assignment, \
-    batch_intents, \
-    get_object_assignment, \
-    get_object_details
+from src.IntuneCD.graph_batch import batch_request, batch_assignment, batch_intents, get_object_assignment, get_object_details
 
 
 class TestGraphBatch(unittest.TestCase):
     """Test class for graph_batch."""
 
     def setUp(self):
-        self.token = 'token'
+        self.token = "token"
         self.batch_request_data = ["1", "2", "3"]
-        self.batch_assignment_data = {'value': [{'id': '0'}]}
+        self.batch_assignment_data = {"value": [{"id": "0"}]}
         self.batch_intents_data = {
-            'value': [
-                {
-                    'id': '0',
-                    'templateId': '0',
-                    'displayName': 'test',
-                    'description': '',
-                    'roleScopeTagIds': ['0']}]}
-        self.responses = [{'value': [
-            {'target': {'groupId': '0', 'deviceAndAppManagementAssignmentFilterId': '0'}}]}]
+            "value": [{"id": "0", "templateId": "0", "displayName": "test", "description": "", "roleScopeTagIds": ["0"]}]
+        }
+        self.responses = [{"value": [{"target": {"groupId": "0", "deviceAndAppManagementAssignmentFilterId": "0"}}]}]
         self.group_responses = [{"displayName": "test", "id": "0"}]
         self.filter_responses = [{"displayName": "test", "id": "0"}]
         self.category_responses = [
             {
-                '@odata.context': "https://graph.microsoft.com/beta/$metadata#deviceManagement/templates('0')/categories",
-                'value': [
-                    {
-                        'id': '0',
-                        'displayName': 'test'}]}]
+                "@odata.context": "https://graph.microsoft.com/beta/$metadata#deviceManagement/templates('0')/categories",
+                "value": [{"id": "0", "displayName": "test"}],
+            }
+        ]
         self.settings_responses = [
             {
-                '@odata.context':
-                    "https://graph.microsoft.com/beta/$metadata#deviceManagement/intents('0')/categories('0')/settings",
-                'value': [
+                "@odata.context": "https://graph.microsoft.com/beta/$metadata#deviceManagement/intents('0')/categories('0')/settings",
+                "value": [
                     {
-                        '@odata.type': '#microsoft.graph.deviceManagementBooleanSettingInstance',
-                        'id': '0',
-                        'definitionId': 'Protection',
-                        'valueJson': 'null',
-                        'value': None}]}]
-
-        self.makeapirequestPost_patch = patch(
-            'src.IntuneCD.graph_batch.makeapirequestPost')
+                        "@odata.type": "#microsoft.graph.deviceManagementBooleanSettingInstance",
+                        "id": "0",
+                        "definitionId": "Protection",
+                        "valueJson": "null",
+                        "value": None,
+                    }
+                ],
+            }
+        ]
+
+        self.makeapirequestPost_patch = patch("src.IntuneCD.graph_batch.makeapirequestPost")
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
 
-        self.get_object_details_patch = patch(
-            'src.IntuneCD.graph_batch.get_object_details')
+        self.get_object_details_patch = patch("src.IntuneCD.graph_batch.get_object_details")
         self.get_object_details = self.get_object_details_patch.start()
 
-        self.get_object_assignment_patch = patch(
-            'src.IntuneCD.graph_batch.get_object_assignment')
+        self.get_object_assignment_patch = patch("src.IntuneCD.graph_batch.get_object_assignment")
         self.get_object_assignment = self.get_object_assignment_patch.start()
 
-        self.batch_intents_patch = patch(
-            'src.IntuneCD.graph_batch.batch_intents')
+        self.batch_intents_patch = patch("src.IntuneCD.graph_batch.batch_intents")
         self.batch_intents = self.batch_intents_patch.start()
 
-        self.batch_assignment_patch = patch(
-            'src.IntuneCD.graph_batch.batch_assignment')
+        self.batch_assignment_patch = patch("src.IntuneCD.graph_batch.batch_assignment")
         self.batch_assignment = self.batch_assignment_patch.start()
 
-        self.batch_request_patch = patch(
-            'src.IntuneCD.graph_batch.batch_request')
+        self.batch_request_patch = patch("src.IntuneCD.graph_batch.batch_request")
         self.batch_request = self.batch_request_patch.start()
         self.batch_request.side_effect = self.responses, self.group_responses, self.filter_responses
 
@@ -88,75 +74,63 @@ def tearDown(self):
     def test_batch_request(self):
         """The batch request function should return the expected result."""
 
-        self.expected_result = [
-            {'odata.count': 1, 'value': [{'id': '0', 'displayName': 'test'}]}]
-        self.makeapirequestPost.return_value = {"responses": [{"id": "5", "status": 200, "body": {
-            'odata.count': 1, "value": [{"id": "0", "displayName": "test"}]}}]}
-        self.result = batch_request(
-            self.batch_request_data, 'test', 'test', self.token)
+        self.expected_result = [{"odata.count": 1, "value": [{"id": "0", "displayName": "test"}]}]
+        self.makeapirequestPost.return_value = {
+            "responses": [
+                {"id": "5", "status": 200, "body": {"odata.count": 1, "value": [{"id": "0", "displayName": "test"}]}}
+            ]
+        }
+        self.result = batch_request(self.batch_request_data, "test", "test", self.token)
 
         self.assertEqual(self.result, self.expected_result)
 
     def test_batch_assignment(self):
         """The batch assignment function should return the expected result."""
 
-        self.expected_result = [{'value': [{'target': {
-            'deviceAndAppManagementAssignmentFilterId': 'test', 'groupId': '0', 'groupName': 'test'}}]}]
-        self.result = batch_assignment(
-            self.batch_assignment_data, 'test', 'test', self.token)
+        self.expected_result = [
+            {"value": [{"target": {"deviceAndAppManagementAssignmentFilterId": "test", "groupId": "0", "groupName": "test"}}]}
+        ]
+        self.result = batch_assignment(self.batch_assignment_data, "test", "test", self.token)
 
         self.assertEqual(self.result, self.expected_result)
 
-    def test_batch_assignment_appProtection_mdmWindowsInformationProtectionPolicy(
-            self):
+    def test_batch_assignment_appProtection_mdmWindowsInformationProtectionPolicy(self):
         """The batch assignment function should return the expected result for the platform."""
 
-        self.batch_assignment_data = {'value': [
-            {'id': '0', '@odata.type': '#microsoft.graph.mdmWindowsInformationProtectionPolicy'}]}
+        self.batch_assignment_data = {
+            "value": [{"id": "0", "@odata.type": "#microsoft.graph.mdmWindowsInformationProtectionPolicy"}]
+        }
 
-        self.expected_result = [{'value': [{'target': {
-            'deviceAndAppManagementAssignmentFilterId': 'test', 'groupId': '0', 'groupName': 'test'}}]}]
-        self.result = batch_assignment(
-            self.batch_assignment_data,
-            'test',
-            'test',
-            self.token,
-            app_protection=True)
+        self.expected_result = [
+            {"value": [{"target": {"deviceAndAppManagementAssignmentFilterId": "test", "groupId": "0", "groupName": "test"}}]}
+        ]
+        self.result = batch_assignment(self.batch_assignment_data, "test", "test", self.token, app_protection=True)
 
         self.assertEqual(self.result, self.expected_result)
 
-    def test_batch_assignment_appProtection_windowsInformationProtectionPolicy(
-            self):
+    def test_batch_assignment_appProtection_windowsInformationProtectionPolicy(self):
         """The batch assignment function should return the expected result for the platform."""
 
-        self.batch_assignment_data = {'value': [
-            {'id': '0', '@odata.type': '#microsoft.graph.windowsInformationProtectionPolicy'}]}
+        self.batch_assignment_data = {
+            "value": [{"id": "0", "@odata.type": "#microsoft.graph.windowsInformationProtectionPolicy"}]
+        }
 
-        self.expected_result = [{'value': [{'target': {
-            'deviceAndAppManagementAssignmentFilterId': 'test', 'groupId': '0', 'groupName': 'test'}}]}]
-        self.result = batch_assignment(
-            self.batch_assignment_data,
-            'test',
-            'test',
-            self.token,
-            app_protection=True)
+        self.expected_result = [
+            {"value": [{"target": {"deviceAndAppManagementAssignmentFilterId": "test", "groupId": "0", "groupName": "test"}}]}
+        ]
+        self.result = batch_assignment(self.batch_assignment_data, "test", "test", self.token, app_protection=True)
 
         self.assertEqual(self.result, self.expected_result)
 
     def test_batch_assignment_appProtection_iosManagedAppProtection(self):
         """The batch assignment function should return the expected result for the platform."""
 
-        self.batch_assignment_data = {'value': [
-            {'id': '0', '@odata.type': '#microsoft.graph.iosManagedAppProtection'}]}
+        self.batch_assignment_data = {"value": [{"id": "0", "@odata.type": "#microsoft.graph.iosManagedAppProtection"}]}
 
-        self.expected_result = [{'value': [{'target': {
-            'deviceAndAppManagementAssignmentFilterId': 'test', 'groupId': '0', 'groupName': 'test'}}]}]
-        self.result = batch_assignment(
-            self.batch_assignment_data,
-            'test',
-            'test',
-            self.token,
-            app_protection=True)
+        self.expected_result = [
+            {"value": [{"target": {"deviceAndAppManagementAssignmentFilterId": "test", "groupId": "0", "groupName": "test"}}]}
+        ]
+        self.result = batch_assignment(self.batch_assignment_data, "test", "test", self.token, app_protection=True)
 
         self.assertEqual(self.result, self.expected_result)
 
@@ -165,20 +139,25 @@ def test_batch_intents(self):
 
         self.batch_request.side_effect = self.category_responses, self.settings_responses
         self.expected_result = {
-            'value': [
+            "value": [
                 {
-                    'description': '',
-                    'displayName': 'test',
-                    'id': '0',
-                    'roleScopeTagIds': ['0'],
-                    'settingsDelta': [
+                    "description": "",
+                    "displayName": "test",
+                    "id": "0",
+                    "roleScopeTagIds": ["0"],
+                    "settingsDelta": [
                         {
-                            '@odata.type': '#microsoft.graph.deviceManagementBooleanSettingInstance',
-                            'definitionId': 'Protection',
-                            'id': '0',
-                            'value': None,
-                            'valueJson': 'null'}],
-                    'templateId': '0'}]}
+                            "@odata.type": "#microsoft.graph.deviceManagementBooleanSettingInstance",
+                            "definitionId": "Protection",
+                            "id": "0",
+                            "value": None,
+                            "valueJson": "null",
+                        }
+                    ],
+                    "templateId": "0",
+                }
+            ]
+        }
         self.result = batch_intents(self.batch_intents_data, self.token)
 
         self.assertEqual(self.result, self.expected_result)
@@ -186,18 +165,14 @@ def test_batch_intents(self):
     def test_get_object_assignment(self):
         """The get object assignment function should return the expected result."""
 
-        self.id = '0'
+        self.id = "0"
         self.response = [
             {
-                '@odata.context':
-                "https://graph.microsoft.com/beta/$metadata#deviceAppManagement/mobileAppConfigurations('0')/assignments",
-                'value': [
-                    {
-                        'id': '0',
-                        'target': {
-                            'groupId': '0',
-                            'groupName': 'test'}}]}]
-        self.expected_result = [{'target': {'groupName': 'test'}}]
+                "@odata.context": "https://graph.microsoft.com/beta/$metadata#deviceAppManagement/mobileAppConfigurations('0')/assignments",
+                "value": [{"id": "0", "target": {"groupId": "0", "groupName": "test"}}],
+            }
+        ]
+        self.expected_result = [{"target": {"groupName": "test"}}]
 
         self.result = get_object_assignment(self.id, self.response)
 
@@ -206,42 +181,53 @@ def test_get_object_assignment(self):
     def test_get_object_details(self):
         """The get object details function should return the expected result."""
 
-        self.id = '0'
+        self.id = "0"
         self.response = [
             {
-                '@odata.context':
-                "https://graph.microsoft.com/beta/$metadata#deviceAppManagement/mobileAppConfigurations('0')",
-                'value': [{
-                    'id': '0',
-                    'displayName': 'test',
-                    'description': '',
-                    'templateId': '0',
-                    'roleScopeTagIds': ['0'],
-                    'settingsDelta': [
-                        {
-                            '@odata.type': '#microsoft.graph.deviceManagementBooleanSettingInstance',
-                            'definitionId': 'Protection',
-                            'id': '0',
-                            'value': None,
-                            'valueJson': 'null'}]}]}]
-        self.expected_result = [{
-            'description': '',
-            'displayName': 'test',
-            'id': '0',
-            'roleScopeTagIds': ['0'],
-            'settingsDelta': [
-                {
-                    '@odata.type': '#microsoft.graph.deviceManagementBooleanSettingInstance',
-                    'definitionId': 'Protection',
-                    'id': '0',
-                    'value': None,
-                    'valueJson': 'null'}],
-            'templateId': '0'}]
+                "@odata.context": "https://graph.microsoft.com/beta/$metadata#deviceAppManagement/mobileAppConfigurations('0')",
+                "value": [
+                    {
+                        "id": "0",
+                        "displayName": "test",
+                        "description": "",
+                        "templateId": "0",
+                        "roleScopeTagIds": ["0"],
+                        "settingsDelta": [
+                            {
+                                "@odata.type": "#microsoft.graph.deviceManagementBooleanSettingInstance",
+                                "definitionId": "Protection",
+                                "id": "0",
+                                "value": None,
+                                "valueJson": "null",
+                            }
+                        ],
+                    }
+                ],
+            }
+        ]
+        self.expected_result = [
+            {
+                "description": "",
+                "displayName": "test",
+                "id": "0",
+                "roleScopeTagIds": ["0"],
+                "settingsDelta": [
+                    {
+                        "@odata.type": "#microsoft.graph.deviceManagementBooleanSettingInstance",
+                        "definitionId": "Protection",
+                        "id": "0",
+                        "value": None,
+                        "valueJson": "null",
+                    }
+                ],
+                "templateId": "0",
+            }
+        ]
 
         self.result = get_object_details(self.id, self.response)
 
         self.assertEqual(self.result, self.expected_result)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/test_graph_request.py b/tests/test_graph_request.py
index cd337941..515311d5 100644
--- a/tests/test_graph_request.py
+++ b/tests/test_graph_request.py
@@ -11,13 +11,7 @@
 from src.IntuneCD.graph_request import makeapirequest, makeapirequestPost, makeapirequestPut, makeapirequestPatch
 
 
-def _mock_response(
-        self,
-        status=200,
-        content="CONTENT",
-        json_data=None,
-        raise_for_status=None,
-        headers={}):
+def _mock_response(self, status=200, content="CONTENT", json_data=None, raise_for_status=None, headers={}):
     """Mock the response from the requests library."""
 
     mock_resp = mock.Mock()
@@ -42,174 +36,126 @@ class TestGraphRequestGet(unittest.TestCase):
     def setUp(self):
         self.token = {"accessToken": "token"}
 
-    def test_makeapirequest_status_429_no_q_param(
-            self, mock_sleep, mock_get, mock_makeapirequest):
+    def test_makeapirequest_status_429_no_q_param(self, mock_sleep, mock_get, mock_makeapirequest):
         """The request should be made once and exception should be raised."""
         with self.assertRaises(Exception):
-            self.mock_resp = _mock_response(
-                self, status=429, content='Too Many equests', headers={'Retry-After': '10'})
-            self.mock_resp2 = _mock_response(
-                self, status=200, content='Success')
+            self.mock_resp = _mock_response(self, status=429, content="Too Many equests", headers={"Retry-After": "10"})
+            self.mock_resp2 = _mock_response(self, status=200, content="Success")
             mock_get.side_effect = self.mock_resp, self.mock_resp2
             makeapirequest("https://endpoint", self.token)
 
         self.assertEqual(2, mock_get.call_count)
 
-    def test_makeapirequest_status_429_with_q_param(
-            self, mock_sleep, mock_get, mock_makeapirequest):
+    def test_makeapirequest_status_429_with_q_param(self, mock_sleep, mock_get, mock_makeapirequest):
         """The request should be made once and exception should be raised."""
         with self.assertRaises(Exception):
-            self.mock_resp = _mock_response(
-                self, status=429, content='Too Many Requests', headers={'Retry-After': '10'})
-            self.mock_resp2 = _mock_response(
-                self, status=200, content='Success')
+            self.mock_resp = _mock_response(self, status=429, content="Too Many Requests", headers={"Retry-After": "10"})
+            self.mock_resp2 = _mock_response(self, status=200, content="Success")
             mock_get.side_effect = self.mock_resp, self.mock_resp2
-            makeapirequest(
-                "https://endpoint",
-                self.token,
-                q_param="$filter=id eq '0'")
+            makeapirequest("https://endpoint", self.token, q_param="$filter=id eq '0'")
 
         self.assertEqual(2, mock_get.call_count)
-    
-    def test_makeapirequest_no_q_param(
-            self, mock_sleep, mock_get, mock_makeapirequest):
+
+    def test_makeapirequest_no_q_param(self, mock_sleep, mock_get, mock_makeapirequest):
         """The request should be made once and the response should be returned."""
-        self.mock_resp = _mock_response(
-            self, status=200, content='{"value": [{"id": "0"}]}')
+        self.mock_resp = _mock_response(self, status=200, content='{"value": [{"id": "0"}]}')
         mock_get.return_value = self.mock_resp
         self.result = makeapirequest("https://endpoint", self.token)
         self.assertEqual(self.result, {"value": [{"id": "0"}]})
 
-    def test_makeapirequest_status_502_no_q_param(
-            self, mock_sleep, mock_get, mock_makeapirequest):
+    def test_makeapirequest_status_502_no_q_param(self, mock_sleep, mock_get, mock_makeapirequest):
         """The request should be made twice and exception should be raised."""
         with self.assertRaises(Exception):
-            self.mock_resp = _mock_response(
-                self, status=502, content='request timeout')
+            self.mock_resp = _mock_response(self, status=502, content="request timeout")
             mock_get.return_value = self.mock_resp
             makeapirequest("https://endpoint", self.token)
 
         self.assertEqual(2, mock_get.call_count)
 
-    def test_makeapirequest_status_503_no_q_param(
-            self, mock_sleep, mock_get, mock_makeapirequest):
+    def test_makeapirequest_status_503_no_q_param(self, mock_sleep, mock_get, mock_makeapirequest):
         """The request should be made twice and exception should be raised."""
         with self.assertRaises(Exception):
-            self.mock_resp = _mock_response(
-                self, status=503, content='request timeout')
+            self.mock_resp = _mock_response(self, status=503, content="request timeout")
             mock_get.return_value = self.mock_resp
             makeapirequest("https://endpoint", self.token)
 
         self.assertEqual(2, mock_get.call_count)
 
-    def test_makeapirequest_status_504_no_q_param(
-            self, mock_sleep, mock_get, mock_makeapirequest):
+    def test_makeapirequest_status_504_no_q_param(self, mock_sleep, mock_get, mock_makeapirequest):
         """The request should be made twice and exception should be raised."""
         with self.assertRaises(Exception):
-            self.mock_resp = _mock_response(
-                self, status=504, content='request timeout')
+            self.mock_resp = _mock_response(self, status=504, content="request timeout")
             mock_get.return_value = self.mock_resp
             makeapirequest("https://endpoint", self.token)
 
         self.assertEqual(2, mock_get.call_count)
 
-    def test_makeapirequest_with_q_param(
-            self, mock_sleep, mock_get, mock_makeapirequest):
+    def test_makeapirequest_with_q_param(self, mock_sleep, mock_get, mock_makeapirequest):
         """The request should be made once and the response should be returned."""
-        self.mock_resp = _mock_response(
-            self, status=200, content='{"value": [{"id": "0"}]}')
+        self.mock_resp = _mock_response(self, status=200, content='{"value": [{"id": "0"}]}')
         mock_get.return_value = self.mock_resp
-        self.result = makeapirequest(
-            "https://endpoint",
-            self.token,
-            q_param="$filter=id eq '0'")
+        self.result = makeapirequest("https://endpoint", self.token, q_param="$filter=id eq '0'")
         self.assertEqual(self.result, {"value": [{"id": "0"}]})
 
-    def test_makeapirequest_status_502_with_q_param(
-            self, mock_sleep, mock_get, mock_makeapirequest):
+    def test_makeapirequest_status_502_with_q_param(self, mock_sleep, mock_get, mock_makeapirequest):
         """The request should be made twice and exception should be raised."""
         with self.assertRaises(Exception):
-            self.mock_resp = _mock_response(
-                self, status=502, content='request timeout')
+            self.mock_resp = _mock_response(self, status=502, content="request timeout")
             mock_get.return_value = self.mock_resp
-            makeapirequest(
-                "https://endpoint",
-                self.token,
-                q_param="$filter=id eq '0'")
+            makeapirequest("https://endpoint", self.token, q_param="$filter=id eq '0'")
 
         self.assertEqual(2, mock_get.call_count)
 
-    def test_makeapirequest_status_503_with_q_param(
-            self, mock_sleep, mock_get, mock_makeapirequest):
+    def test_makeapirequest_status_503_with_q_param(self, mock_sleep, mock_get, mock_makeapirequest):
         """The request should be made twice and exception should be raised."""
         with self.assertRaises(Exception):
-            self.mock_resp = _mock_response(
-                self, status=503, content='request timeout')
+            self.mock_resp = _mock_response(self, status=503, content="request timeout")
             mock_get.return_value = self.mock_resp
-            makeapirequest(
-                "https://endpoint",
-                self.token,
-                q_param="$filter=id eq '0'")
+            makeapirequest("https://endpoint", self.token, q_param="$filter=id eq '0'")
 
         self.assertEqual(2, mock_get.call_count)
 
-    def test_makeapirequest_status_504_with_q_param(
-            self, mock_sleep, mock_get, mock_makeapirequest):
+    def test_makeapirequest_status_504_with_q_param(self, mock_sleep, mock_get, mock_makeapirequest):
         """The request should be made twice and exception should be raised."""
         with self.assertRaises(Exception):
-            self.mock_resp = _mock_response(
-                self, status=504, content='request timeout')
+            self.mock_resp = _mock_response(self, status=504, content="request timeout")
             mock_get.return_value = self.mock_resp
-            makeapirequest(
-                "https://endpoint",
-                self.token,
-                q_param="$filter=id eq '0'")
+            makeapirequest("https://endpoint", self.token, q_param="$filter=id eq '0'")
 
         self.assertEqual(2, mock_get.call_count)
 
-    def test_makeapirequest_odata_nextlink(
-            self, mock_sleep, mock_get, mock_makeapirequest):
+    def test_makeapirequest_odata_nextlink(self, mock_sleep, mock_get, mock_makeapirequest):
         """The request should be made and the response should contain next link values."""
         self.NEXT_LINK_VALUE = {"value": [{"id": "1"}]}
         mock_makeapirequest.return_value = self.NEXT_LINK_VALUE
         self.mock_resp = _mock_response(
-            self,
-            status=200,
-            content='{"value": [{"id": "0"}], "@odata.nextLink": "https://endpoint"}')
+            self, status=200, content='{"value": [{"id": "0"}], "@odata.nextLink": "https://endpoint"}'
+        )
         mock_get.return_value = self.mock_resp
         self.result = makeapirequest("https://endpoint", self.token)
 
-        self.assertEqual(self.result['value'], [{"id": "0"}, {"id": "1"}])
+        self.assertEqual(self.result["value"], [{"id": "0"}, {"id": "1"}])
 
-    def test_makeapirequest_status_404(
-            self, mock_sleep, mock_get, mock_makeapirequest):
+    def test_makeapirequest_status_404(self, mock_sleep, mock_get, mock_makeapirequest):
         """The request should be made and the response should be returned."""
-        self.mock_resp = _mock_response(
-            self, status=404, content='not found')
+        self.mock_resp = _mock_response(self, status=404, content="not found")
         mock_get.return_value = self.mock_resp
         makeapirequest("https://endpoint", self.token)
 
         self.assertEqual(1, mock_get.call_count)
 
-    def test_makeapirequest_assignmentfilter_not_enabled(
-            self, mock_sleep, mock_get, mock_makeapirequest):
+    def test_makeapirequest_assignmentfilter_not_enabled(self, mock_sleep, mock_get, mock_makeapirequest):
         """The request should be made and assignment filters should be skipped."""
-        self.mock_resp = _mock_response(
-            self, status=500, content='{"FeatureNotEnabled": []}')
+        self.mock_resp = _mock_response(self, status=500, content='{"FeatureNotEnabled": []}')
         mock_get.return_value = self.mock_resp
         makeapirequest("https://endpoint/assignmentFilters", self.token)
 
         self.assertEqual(1, mock_get.call_count)
 
-    def test_makeapirequest_exception(
-            self,
-            mock_sleep,
-            mock_get,
-            mock_makeapirequest):
+    def test_makeapirequest_exception(self, mock_sleep, mock_get, mock_makeapirequest):
         """The request should be made and exception should be raised."""
         with self.assertRaises(Exception):
-            self.mock_resp = _mock_response(
-                self, status=500, content='Internal Server Error')
+            self.mock_resp = _mock_response(self, status=500, content="Internal Server Error")
             mock_get.return_value = self.mock_resp
             makeapirequest("https://endpoint/", self.token)
 
@@ -219,51 +165,33 @@ def test_makeapirequest_exception(
 @patch("src.IntuneCD.graph_request.makeapirequestPatch")
 @patch("requests.patch")
 class TestGraphRequestPatch(unittest.TestCase):
-
     def setUp(self):
         self.token = {"accessToken": "token"}
 
-    def test_makeapirequestPatch_no_q_param(
-            self, mock_patch, mock_makeapirequestPatch):
+    def test_makeapirequestPatch_no_q_param(self, mock_patch, mock_makeapirequestPatch):
         """The request should be made and the response should be returned."""
-        self.mock_resp = _mock_response(
-            self, status=200, content='')
+        self.mock_resp = _mock_response(self, status=200, content="")
         mock_patch.return_value = self.mock_resp
-        result = makeapirequestPatch(
-            "https://endpoint",
-            self.token,
-            q_param=None,
-            jdata='{"id": "0"}')
+        result = makeapirequestPatch("https://endpoint", self.token, q_param=None, jdata='{"id": "0"}')
 
         self.assertEqual(result, None)
 
-    def test_makeapirequestPatch_with_q_param(
-            self, mock_patch, mock_makeapirequestPatch):
+    def test_makeapirequestPatch_with_q_param(self, mock_patch, mock_makeapirequestPatch):
         """The request should be made and the response should be returned."""
-        self.mock_resp = _mock_response(
-            self, status=200, content='')
+        self.mock_resp = _mock_response(self, status=200, content="")
         mock_patch.return_value = self.mock_resp
-        self.result = makeapirequestPatch(
-            "https://endpoint",
-            self.token,
-            q_param="$filter=id eq '0'",
-            jdata='{"id": "0"}')
+        self.result = makeapirequestPatch("https://endpoint", self.token, q_param="$filter=id eq '0'", jdata='{"id": "0"}')
 
         self.assertEqual(self.result, None)
 
-    def test_makeapirequestPatch_not_matching_status_code(
-            self, mock_patch, mock_makeapirequestPatch):
+    def test_makeapirequestPatch_not_matching_status_code(self, mock_patch, mock_makeapirequestPatch):
         """The request should be made and the response should be returned."""
         with self.assertRaises(Exception):
-            self.mock_resp = _mock_response(
-                self, status=204, content='')
+            self.mock_resp = _mock_response(self, status=204, content="")
             mock_patch.return_value = self.mock_resp
             makeapirequestPatch(
-                "https://endpoint",
-                self.token,
-                q_param="$filter=id eq '0'",
-                jdata='{"id": "0"}',
-                status_code=200)
+                "https://endpoint", self.token, q_param="$filter=id eq '0'", jdata='{"id": "0"}', status_code=200
+            )
 
         self.assertEqual(1, mock_patch.call_count)
 
@@ -271,54 +199,34 @@ def test_makeapirequestPatch_not_matching_status_code(
 @patch("src.IntuneCD.graph_request.makeapirequestPost")
 @patch("requests.post")
 class TestGraphRequestPost(unittest.TestCase):
-
     def setUp(self):
         self.token = {"accessToken": "token"}
         self.jdata = {"id": "0"}
         self.content = '{"id": "0"}'
         self.expected_result = {"id": "0"}
 
-    def test_makeapirequestPost_no_q_param(
-            self, mock_patch, mock_makeapirequestPost):
+    def test_makeapirequestPost_no_q_param(self, mock_patch, mock_makeapirequestPost):
         """The request should be made and the response should be returned."""
-        self.mock_resp = _mock_response(
-            self, status=200, content=self.content)
+        self.mock_resp = _mock_response(self, status=200, content=self.content)
         mock_patch.return_value = self.mock_resp
-        self.result = makeapirequestPost(
-            "https://endpoint",
-            self.token,
-            q_param=None,
-            jdata=self.jdata)
+        self.result = makeapirequestPost("https://endpoint", self.token, q_param=None, jdata=self.jdata)
 
         self.assertEqual(self.result, self.expected_result)
 
-    def test_makeapirequestPost_with_q_param(
-            self, mock_patch, mock_makeapirequestPost):
+    def test_makeapirequestPost_with_q_param(self, mock_patch, mock_makeapirequestPost):
         """The request should be made and the response should be returned."""
-        self.mock_resp = _mock_response(
-            self, status=200, content=self.content)
+        self.mock_resp = _mock_response(self, status=200, content=self.content)
         mock_patch.return_value = self.mock_resp
-        self.result = makeapirequestPost(
-            "https://endpoint",
-            self.token,
-            q_param="$filter=id eq '0'",
-            jdata=self.jdata)
+        self.result = makeapirequestPost("https://endpoint", self.token, q_param="$filter=id eq '0'", jdata=self.jdata)
 
         self.assertEqual(self.result, self.expected_result)
 
-    def test_makeapirequestPost_not_matching_status_code(
-            self, mock_patch, mock_makeapirequestPost):
+    def test_makeapirequestPost_not_matching_status_code(self, mock_patch, mock_makeapirequestPost):
         """The request should be made and the response should be returned."""
         with self.assertRaises(Exception):
-            self.mock_resp = _mock_response(
-                self, status=204, content='')
+            self.mock_resp = _mock_response(self, status=204, content="")
             mock_patch.return_value = self.mock_resp
-            makeapirequestPost(
-                "https://endpoint",
-                self.token,
-                q_param="$filter=id eq '0'",
-                jdata=self.jdata,
-                status_code=200)
+            makeapirequestPost("https://endpoint", self.token, q_param="$filter=id eq '0'", jdata=self.jdata, status_code=200)
 
         self.assertEqual(1, mock_patch.call_count)
 
@@ -326,54 +234,36 @@ def test_makeapirequestPost_not_matching_status_code(
 @patch("src.IntuneCD.graph_request.makeapirequestPut")
 @patch("requests.put")
 class TestGraphRequestPut(unittest.TestCase):
-
     def setUp(self):
         self.token = {"accessToken": "token"}
 
-    def test_makeapirequestPut_no_q_param(
-            self, mock_patch, mock_makeapirequestPut):
+    def test_makeapirequestPut_no_q_param(self, mock_patch, mock_makeapirequestPut):
         """The request should be made and the response should be returned."""
-        self.mock_resp = _mock_response(
-            self, status=200, content='')
+        self.mock_resp = _mock_response(self, status=200, content="")
         mock_patch.return_value = self.mock_resp
-        self.result = makeapirequestPut(
-            "https://endpoint",
-            self.token,
-            q_param=None,
-            jdata='{"id": "0"}')
+        self.result = makeapirequestPut("https://endpoint", self.token, q_param=None, jdata='{"id": "0"}')
 
         self.assertEqual(self.result, None)
 
-    def test_makeapirequestPut_with_q_param(
-            self, mock_patch, mock_makeapirequestPut):
+    def test_makeapirequestPut_with_q_param(self, mock_patch, mock_makeapirequestPut):
         """The request should be made and the response should be returned."""
-        self.mock_resp = _mock_response(
-            self, status=200, content='')
+        self.mock_resp = _mock_response(self, status=200, content="")
         mock_patch.return_value = self.mock_resp
-        self.result = makeapirequestPut(
-            "https://endpoint",
-            self.token,
-            q_param="$filter=id eq '0'",
-            jdata='{"id": "0"}')
+        self.result = makeapirequestPut("https://endpoint", self.token, q_param="$filter=id eq '0'", jdata='{"id": "0"}')
 
         self.assertEqual(self.result, None)
 
-    def test_makeapirequestPut_not_matching_status_code(
-            self, mock_patch, mock_makeapirequestPut):
+    def test_makeapirequestPut_not_matching_status_code(self, mock_patch, mock_makeapirequestPut):
         """The request should be made and the response should be returned."""
         with self.assertRaises(Exception):
-            self.mock_resp = _mock_response(
-                self, status=204, content='')
+            self.mock_resp = _mock_response(self, status=204, content="")
             mock_patch.return_value = self.mock_resp
             makeapirequestPut(
-                "https://endpoint",
-                self.token,
-                q_param="$filter=id eq '0'",
-                jdata='{"id": "0"}',
-                status_code=200)
+                "https://endpoint", self.token, q_param="$filter=id eq '0'", jdata='{"id": "0"}', status_code=200
+            )
 
         self.assertEqual(1, mock_patch.call_count)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/test_load_file.py b/tests/test_load_file.py
index 8a4e2ed7..5c8c5d55 100644
--- a/tests/test_load_file.py
+++ b/tests/test_load_file.py
@@ -18,14 +18,8 @@ def setUp(self):
         self.json_name = "file_name.json"
         self.directory = TempDirectory()
         self.directory.create()
-        self.yaml_file = self.directory.write(
-            self.yaml_name,
-            "yaml",
-            encoding="utf-8")
-        self.json_file = self.directory.write(
-            self.json_name,
-            '{"data": "fake_data"}',
-            encoding="utf-8")
+        self.yaml_file = self.directory.write(self.yaml_name, "yaml", encoding="utf-8")
+        self.json_file = self.directory.write(self.json_name, '{"data": "fake_data"}', encoding="utf-8")
 
     def tearDown(self):
         self.directory.cleanup()
@@ -47,5 +41,5 @@ def test_load_file_invalid_format(self):
             load_file("file_name.txt", "txt")
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/test_match.py b/tests/test_match.py
index 58ee041e..693d3242 100644
--- a/tests/test_match.py
+++ b/tests/test_match.py
@@ -14,44 +14,44 @@ class TestMatch(unittest.TestCase):
 
     def test_match_macOS(self):
         """The odata type should match the expected value."""
-        self.app = {'@odata.type': '#microsoft.graph.macOsVppApp'}
+        self.app = {"@odata.type": "#microsoft.graph.macOsVppApp"}
 
-        self.result = ('macos', str(self.app['@odata.type']).lower())
+        self.result = ("macos", str(self.app["@odata.type"]).lower())
 
         self.assertTrue(self.result)
 
     def test_match_ios(self):
         """The odata type should match the expected value."""
-        self.app = {'@odata.type': '#microsoft.graph.iosStoreApp'}
+        self.app = {"@odata.type": "#microsoft.graph.iosStoreApp"}
 
-        self.result = ('ios', str(self.app['@odata.type']).lower())
+        self.result = ("ios", str(self.app["@odata.type"]).lower())
 
         self.assertTrue(self.result)
 
     def test_match_windows(self):
         """The odata type should match the expected value."""
-        self.app = {'@odata.type': '#microsoft.graph.win32LobApp'}
+        self.app = {"@odata.type": "#microsoft.graph.win32LobApp"}
 
-        self.result = match('win32', str(self.app['@odata.type']).lower())
+        self.result = match("win32", str(self.app["@odata.type"]).lower())
 
         self.assertTrue(self.result)
 
     def test_match_android(self):
         """The odata type should match the expected value."""
-        self.app = {'@odata.type': '#microsoft.graph.androidStoreApp'}
+        self.app = {"@odata.type": "#microsoft.graph.androidStoreApp"}
 
-        self.result = match('android', str(self.app['@odata.type']).lower())
+        self.result = match("android", str(self.app["@odata.type"]).lower())
 
         self.assertTrue(self.result)
 
     def test_match_unknown(self):
         """Unkown odata type should return false."""
-        self.app = {'@odata.type': '#microsoft.graph.unknown'}
+        self.app = {"@odata.type": "#microsoft.graph.unknown"}
 
-        self.result = match('iOS', str(self.app['@odata.type']).lower())
+        self.result = match("iOS", str(self.app["@odata.type"]).lower())
 
         self.assertFalse(self.result)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/test_remove_keys.py b/tests/test_remove_keys.py
index f39ccc30..b958d45a 100644
--- a/tests/test_remove_keys.py
+++ b/tests/test_remove_keys.py
@@ -10,16 +10,12 @@ class TestRemoveKeys(unittest.TestCase):
 
     def test_remove_keys(self):
         """The dict should be returned with the keys removed."""
-        self.dict = {
-            'id': '1',
-            'isGlobalScript': True,
-            'lastModifiedDateTime': "2022-07-06",
-            'awesome_key': 'awesome_value'}
+        self.dict = {"id": "1", "isGlobalScript": True, "lastModifiedDateTime": "2022-07-06", "awesome_key": "awesome_value"}
 
         self.dict = remove_keys(self.dict)
 
-        self.assertEqual(self.dict, {'awesome_key': 'awesome_value'})
+        self.assertEqual(self.dict, {"awesome_key": "awesome_value"})
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/test_save_output.py b/tests/test_save_output.py
index 00e20484..2bda69c8 100644
--- a/tests/test_save_output.py
+++ b/tests/test_save_output.py
@@ -30,33 +30,28 @@ def tearDown(self):
 
     def test_save_output_json(self, mock_save_output):
         """The file created by the function should have the expected contents."""
-        self.save = save_output('json', self.path, self.fname, self.data)
+        self.save = save_output("json", self.path, self.fname, self.data)
 
-        with open(self.path + self.fname + ".json", 'r') as f:
+        with open(self.path + self.fname + ".json", "r") as f:
             self.json = json.load(f)
 
-        self.assertEqual(
-            self.json['test_content'],
-            self.expected_data['test_content'])
+        self.assertEqual(self.json["test_content"], self.expected_data["test_content"])
 
     def test_save_output_yaml(self, mock_save_output):
         """The file created by the function should have the expected contents."""
-        self.save = save_output('yaml', self.path, self.fname, self.data)
+        self.save = save_output("yaml", self.path, self.fname, self.data)
 
-        with open(self.path + self.fname + ".yaml", 'r') as f:
+        with open(self.path + self.fname + ".yaml", "r") as f:
             data = json.dumps(yaml.safe_load(f))
             self.yaml = json.loads(data)
 
-        self.assertEqual(
-            self.yaml['test_content'],
-            self.expected_data['test_content'])
+        self.assertEqual(self.yaml["test_content"], self.expected_data["test_content"])
 
     def test_save_output_invalid_format(self, mock_save_output):
         """The function should raise an error if the format is invalid."""
         with self.assertRaises(ValueError):
-            self.save = save_output(
-                'invalid', self.path, self.fname, self.data)
+            self.save = save_output("invalid", self.path, self.fname, self.data)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()
diff --git a/tests/test_update_frontend.py b/tests/test_update_frontend.py
index cead84fa..c18891ba 100644
--- a/tests/test_update_frontend.py
+++ b/tests/test_update_frontend.py
@@ -11,12 +11,7 @@
 from src.IntuneCD.update_frontend import update_frontend
 
 
-def _mock_response(
-        self,
-        status=200,
-        content="CONTENT",
-        json_data=None,
-        raise_for_status=None):
+def _mock_response(self, status=200, content="CONTENT", json_data=None, raise_for_status=None):
     """Mock the response on the requests module."""
 
     mock_resp = mock.Mock()
@@ -34,48 +29,35 @@ def _mock_response(
 @patch("src.IntuneCD.update_frontend.update_frontend")
 @patch("requests.post")
 class TestUpdateFrontend(unittest.TestCase):
-
     def test_update_env_configured(self, mock_post, mock_update_frontend):
         """
         Test that the update_frontend function is called with the correct parameters.
         """
 
-        self.mock_resp = _mock_response(
-            self, status=200, content='')
+        self.mock_resp = _mock_response(self, status=200, content="")
         mock_post.return_value = self.mock_resp
 
-        with patch.dict("os.environ", {'API_KEY': 'test'}):
-            self.update = update_frontend("http://localhost:8080/update",
-                                          {"configurations": 1})
+        with patch.dict("os.environ", {"API_KEY": "test"}):
+            self.update = update_frontend("http://localhost:8080/update", {"configurations": 1})
 
             mock_post.assert_called_once_with(
-                'http://localhost:8080/update',
-                json={
-                    'configurations': 1},
-                headers={
-                    'X-API-Key': 'test'})
+                "http://localhost:8080/update", json={"configurations": 1}, headers={"X-API-Key": "test"}
+            )
 
     def test_update_env_not_configured(self, mock_post, mock_update_frontend):
         """If the API_KEY is not configured, the function should raise an exception."""
         with patch.dict("os.environ", {}):
-            self.assertRaises(Exception,
-                              update_frontend,
-                              "http://localhost:8080/update",
-                              {"configurations": 1})
+            self.assertRaises(Exception, update_frontend, "http://localhost:8080/update", {"configurations": 1})
 
     def test_update_frontend_error(self, mock_post, mock_update_frontend):
         """If the update failed the function should raise an exception."""
 
-        self.mock_resp = _mock_response(
-            self, status=500, content='Internal Server Error')
+        self.mock_resp = _mock_response(self, status=500, content="Internal Server Error")
         mock_post.return_value = self.mock_resp
 
-        with patch.dict("os.environ", {'API_KEY': 'test'}):
-            self.assertRaises(Exception,
-                              update_frontend,
-                              "http://localhost:8080/update",
-                              {"configurations": 1})
+        with patch.dict("os.environ", {"API_KEY": "test"}):
+            self.assertRaises(Exception, update_frontend, "http://localhost:8080/update", {"configurations": 1})
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main()