package com.servicebook.ui /** * Single source of truth for Compose test tags. * * Production code calls `Modifier.testTag(TestTags.X)`; tests call * `onNodeWithTag(TestTags.X)`. Centralising the strings here lets IDE refactors * find every reference and prevents typos that silently fail to match. * * String values are kept stable so existing test code that still uses raw * literals continues to work during the migration. */ object TestTags { // Top app bar const val SCREEN_TITLE = "ScreenTitle" const val SAVE_BUTTON = "SaveButton" const val MORE_OPTIONS_BUTTON = "MoreOptionsButton" const val SETTINGS_BUTTON = "SettingsButton" // Confirm dialog const val CONFIRM_DELETE_BUTTON = "ConfirmDeleteButton" // Vehicle list / detail const val ADD_VEHICLE_FAB = "AddVehicleFab" const val ADD_RECORD_FAB = "AddRecordFab" // Vehicle form fields const val VEHICLE_NICKNAME_FIELD = "VehicleNicknameField" const val VEHICLE_YEAR_FIELD = "VehicleYearField" const val MAKE_FIELD = "MakeField" // Make picker dialog const val MAKE_SEARCH_FIELD = "MakeSearchField" const val CUSTOM_MAKE_INPUT = "CustomMakeInput" const val MAKE_CUSTOM_ROW = "MakeCustomRow" const val MAKE_PICKER_CONFIRM = "ConfirmButton" fun makeItem(make: String) = "MakeItem_$make" // Record form fields const val RECORD_ODOMETER_FIELD = "RecordOdometerField" const val RECORD_COST_FIELD = "RecordCostField" const val PERFORMER_FIELD = "PerformerField" const val NOTES_FIELD = "NotesField" const val CATEGORY_BOTTOM_SHEET = "CategoryBottomSheet" // Record detail const val RECORD_DETAIL_ODOMETER_TEXT = "RecordDetail_OdometerText" const val RECORD_DETAIL_CATEGORY_TEXT = "RecordDetail_CategoryText" fun recordDetailAttachmentThumbnail(filename: String) = "RecordDetail_AttachmentThumbnail_$filename" // Attachments (edit) fun attachmentThumbnail(filename: String) = "AttachmentThumbnail_$filename" fun removeAttachment(filename: String) = "RemoveAttachment_$filename" // Records list fun recordItem(recordId: String) = "RecordItem_$recordId" // Categories screen const val ADD_CATEGORY_BUTTON = "AddCategoryButton" // Paywall const val PAYWALL_STATUS_CARD = "paywall-status-card" const val PAYWALL_INFO_SHEET = "paywall-info-sheet" // Settings const val SETTINGS_CRASH_REPORTING_TOGGLE = "settings_crash_reporting_toggle" const val SETUP_CRASH_REPORTING_TOGGLE = "setup_crash_reporting_toggle" const val CONSENT_DIALOG = "consent_dialog" // Report Bug const val REPORT_BUG_TYPE_BUG = "report_bug_type_bug" const val REPORT_BUG_TYPE_SUGGESTION = "report_bug_type_suggestion" const val REPORT_BUG_SUMMARY_FIELD = "report_bug_summary_field" const val REPORT_BUG_DESCRIPTION_FIELD = "report_bug_description_field" const val REPORT_BUG_EMAIL_FIELD = "report_bug_email_field" const val REPORT_BUG_DEVICE_INFO_TOGGLE = "report_bug_device_info_toggle" const val REPORT_BUG_DEVICE_INFO_CARD = "report_bug_device_info_card" const val REPORT_BUG_SUBMIT_BUTTON = "report_bug_submit_button" const val REPORT_BUG_LOADING = "report_bug_loading" const val REPORT_BUG_DISCLOSURE = "report_bug_disclosure" const val PRIVACY_LEARN_MORE = "privacy_learn_more" }