diff --git a/.github/workflows/e2ePerformanceTests.yml b/.github/workflows/e2ePerformanceTests.yml
index 31bfdf963525..60ba16164eb6 100644
--- a/.github/workflows/e2ePerformanceTests.yml
+++ b/.github/workflows/e2ePerformanceTests.yml
@@ -200,9 +200,10 @@ jobs:
if: failure()
run: |
echo ${{ steps.schedule-awsdf-main.outputs.data }}
- cat "./mainResults/Host_Machine_Files/\$WORKING_DIRECTORY/Test spec output.txt"
unzip "Customer Artifacts.zip" -d mainResults
- cat ./mainResults/Host_Machine_Files/\$WORKING_DIRECTORY/debug.log
+ cat "./mainResults/Host_Machine_Files/\$WORKING_DIRECTORY/logcat.txt" || true
+ cat ./mainResults/Host_Machine_Files/\$WORKING_DIRECTORY/debug.log || true
+ cat "./mainResults/Host_Machine_Files/\$WORKING_DIRECTORY/Test spec output.txt" || true
- name: Unzip AWS Device Farm results
if: ${{ always() }}
diff --git a/__mocks__/@react-native-community/push-notification-ios.js b/__mocks__/@react-native-community/push-notification-ios.js
deleted file mode 100644
index 0fe8354b9e08..000000000000
--- a/__mocks__/@react-native-community/push-notification-ios.js
+++ /dev/null
@@ -1,5 +0,0 @@
-export default {
- addEventListener: jest.fn(),
- requestPermissions: jest.fn(() => Promise.resolve()),
- getInitialNotification: jest.fn(() => Promise.resolve()),
-};
diff --git a/__mocks__/push-notification-ios.js b/__mocks__/push-notification-ios.js
deleted file mode 100644
index 0fe8354b9e08..000000000000
--- a/__mocks__/push-notification-ios.js
+++ /dev/null
@@ -1,5 +0,0 @@
-export default {
- addEventListener: jest.fn(),
- requestPermissions: jest.fn(() => Promise.resolve()),
- getInitialNotification: jest.fn(() => Promise.resolve()),
-};
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 1301f18d7e8f..6ed326f9dee1 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -98,8 +98,8 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled rootProject.ext.multiDexEnabled
- versionCode 1001043707
- versionName "1.4.37-7"
+ versionCode 1001043800
+ versionName "1.4.38-0"
}
flavorDimensions "default"
diff --git a/babel.config.js b/babel.config.js
index 0a17f2b0f01c..d3bcecdae8cb 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -1,5 +1,7 @@
require('dotenv').config();
+const IS_E2E_TESTING = process.env.E2E_TESTING === 'true';
+
const defaultPresets = ['@babel/preset-react', '@babel/preset-env', '@babel/preset-flow', '@babel/preset-typescript'];
const defaultPlugins = [
// Adding the commonjs: true option to react-native-web plugin can cause styling conflicts
@@ -72,7 +74,8 @@ const metro = {
],
env: {
production: {
- plugins: [['transform-remove-console', {exclude: ['error', 'warn']}]],
+ // Keep console logs for e2e tests
+ plugins: IS_E2E_TESTING ? [] : [['transform-remove-console', {exclude: ['error', 'warn']}]],
},
},
};
diff --git a/ios/NewApp_AdHoc.mobileprovision.gpg b/ios/NewApp_AdHoc.mobileprovision.gpg
index 454857981834..643c81bd0b9c 100644
Binary files a/ios/NewApp_AdHoc.mobileprovision.gpg and b/ios/NewApp_AdHoc.mobileprovision.gpg differ
diff --git a/ios/NewApp_AdHoc_Notification_Service.mobileprovision.gpg b/ios/NewApp_AdHoc_Notification_Service.mobileprovision.gpg
index ba9258840638..8a5170cfe697 100644
Binary files a/ios/NewApp_AdHoc_Notification_Service.mobileprovision.gpg and b/ios/NewApp_AdHoc_Notification_Service.mobileprovision.gpg differ
diff --git a/ios/NewExpensify/Info.plist b/ios/NewExpensify/Info.plist
index a2effb8de0b1..5b280de0c195 100644
--- a/ios/NewExpensify/Info.plist
+++ b/ios/NewExpensify/Info.plist
@@ -19,7 +19,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 1.4.37
+ 1.4.38
CFBundleSignature
????
CFBundleURLTypes
@@ -40,7 +40,7 @@
CFBundleVersion
- 1.4.37.7
+ 1.4.38.0
ITSAppUsesNonExemptEncryption
LSApplicationQueriesSchemes
diff --git a/ios/NewExpensifyTests/Info.plist b/ios/NewExpensifyTests/Info.plist
index 02b01e7153d0..8d17d0c0c572 100644
--- a/ios/NewExpensifyTests/Info.plist
+++ b/ios/NewExpensifyTests/Info.plist
@@ -15,10 +15,10 @@
CFBundlePackageType
BNDL
CFBundleShortVersionString
- 1.4.37
+ 1.4.38
CFBundleSignature
????
CFBundleVersion
- 1.4.37.7
+ 1.4.38.0
diff --git a/ios/NotificationServiceExtension/Info.plist b/ios/NotificationServiceExtension/Info.plist
index 69e1e7d6e9d9..7af26a2c647b 100644
--- a/ios/NotificationServiceExtension/Info.plist
+++ b/ios/NotificationServiceExtension/Info.plist
@@ -11,9 +11,9 @@
CFBundleName
$(PRODUCT_NAME)
CFBundleShortVersionString
- 1.4.37
+ 1.4.38
CFBundleVersion
- 1.4.37.7
+ 1.4.38.0
NSExtension
NSExtensionPointIdentifier
diff --git a/package-lock.json b/package-lock.json
index 11099886bfb0..1825fa649ae9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "new.expensify",
- "version": "1.4.37-7",
+ "version": "1.4.38-0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "new.expensify",
- "version": "1.4.37-7",
+ "version": "1.4.38-0",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
diff --git a/package.json b/package.json
index 71983e0e1679..4a8a7ec5612a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "new.expensify",
- "version": "1.4.37-7",
+ "version": "1.4.38-0",
"author": "Expensify, Inc.",
"homepage": "https://new.expensify.com",
"description": "New Expensify is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.",
diff --git a/src/pages/iou/request/step/IOURequestStepTag.js b/src/pages/iou/request/step/IOURequestStepTag.js
index 1297b98a0814..a05a14cb4403 100644
--- a/src/pages/iou/request/step/IOURequestStepTag.js
+++ b/src/pages/iou/request/step/IOURequestStepTag.js
@@ -69,7 +69,7 @@ function IOURequestStepTag({
const updateTag = (selectedTag) => {
const isSelectedTag = selectedTag.searchText === tag;
const updatedTag = !isSelectedTag ? selectedTag.searchText : '';
- if (isSplitBill) {
+ if (isSplitBill && isEditing) {
IOU.setDraftSplitTransaction(transactionID, {tag: selectedTag.searchText});
navigateBack();
return;
diff --git a/src/pages/iou/request/step/IOURequestStepWaypoint.js b/src/pages/iou/request/step/IOURequestStepWaypoint.js
index 4c35951bc297..93a87baa0481 100644
--- a/src/pages/iou/request/step/IOURequestStepWaypoint.js
+++ b/src/pages/iou/request/step/IOURequestStepWaypoint.js
@@ -113,8 +113,8 @@ function IOURequestStepWaypoint({
const locationBias = useLocationBias(allWaypoints, userLocation);
const waypointAddress = lodashGet(currentWaypoint, 'address', '');
- // Hide the menu when there is only start and finish waypoint
- const shouldShowThreeDotsButton = waypointCount > 2;
+ // Hide the menu when there is only start and finish waypoint or the current waypoint is empty
+ const shouldShowThreeDotsButton = waypointCount > 2 && waypointAddress;
const shouldDisableEditor =
isFocused &&
(Number.isNaN(parsedWaypointIndex) || parsedWaypointIndex < 0 || parsedWaypointIndex > waypointCount || (filledWaypointCount < 2 && parsedWaypointIndex >= waypointCount));
diff --git a/tests/perf-test/SearchPage.perf-test.js b/tests/perf-test/SearchPage.perf-test.js
index b27a2e2115be..8c6148f9e103 100644
--- a/tests/perf-test/SearchPage.perf-test.js
+++ b/tests/perf-test/SearchPage.perf-test.js
@@ -103,7 +103,7 @@ function SearchPageWrapper(args) {
);
}
-test('[Search Page] should interact when text input changes', async () => {
+test.skip('[Search Page] should interact when text input changes', async () => {
const {addListener} = TestHelper.createAddListenerMock();
const scenario = async () => {
@@ -130,7 +130,7 @@ test('[Search Page] should interact when text input changes', async () => {
.then(() => measurePerformance(, {scenario}));
});
-test('[Search Page] should render options list', async () => {
+test.skip('[Search Page] should render options list', async () => {
const {triggerTransitionEnd, addListener} = TestHelper.createAddListenerMock();
const smallMockedPersonalDetails = getMockedPersonalDetails(5);
@@ -156,7 +156,7 @@ test('[Search Page] should render options list', async () => {
.then(() => measurePerformance(, {scenario}));
});
-test('[Search Page] should search in options list', async () => {
+test.skip('[Search Page] should search in options list', async () => {
const {triggerTransitionEnd, addListener} = TestHelper.createAddListenerMock();
const scenario = async () => {
@@ -183,7 +183,7 @@ test('[Search Page] should search in options list', async () => {
.then(() => measurePerformance(, {scenario}));
});
-test('[Search Page] should click on list item', async () => {
+test.skip('[Search Page] should click on list item', async () => {
const {triggerTransitionEnd, addListener} = TestHelper.createAddListenerMock();
const scenario = async () => {