Repository: almenscorner/IntuneCD (language: python)

Issue:
Bugfix - keys not removed when excluding assignments on compliance
If assignments were excluded when running the backup, the removal of keys on compliance policies was also skipped. This has been fixed so keys are always removed.

closes #76 


Discussion / hints:

Fix patch:
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()