diff --git a/.github/workflows/e2e-tests.yaml b/.github/workflows/e2e-tests.yaml
new file mode 100644
index 0000000..52fcf83
--- /dev/null
+++ b/.github/workflows/e2e-tests.yaml
@@ -0,0 +1,93 @@
+name: React Native iOS E2E Tests
+
+on:
+ pull_request:
+ branches: [ main, develop ]
+ push:
+ branches: [ main, develop ]
+ workflow_dispatch:
+
+jobs:
+ test-ios:
+ name: e2e-ios-test
+ runs-on: macos-13
+ env:
+ DEVELOPER_DIR: /Applications/Xcode_15.0.app/Contents/Developer
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Setup Ruby
+ uses: ruby/setup-ruby@v1
+ with:
+ ruby-version: '3.0'
+ bundler-cache: true
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: '18'
+ cache: 'yarn'
+
+ - name: Install dependencies
+ run: |
+ yarn install --frozen-lockfile
+ cd ios && bundle install
+
+ - name: Install CocoaPods
+ run: |
+ cd ios
+ pod install
+ cd ..
+
+ - name: Build iOS App
+ run: |
+ cd ios
+ xcodebuild -workspace weatherApp.xcworkspace -scheme weatherApp -configuration Release -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=latest' build
+ env:
+ FASTLANE_DISABLE_COLORS: 1
+
+ - name: Boot Simulator and Launch App
+ run: |
+ UDID=$(xcrun simctl list devices | grep "iPhone 15" | grep -E -o -i "([0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12})")
+ xcrun simctl boot $UDID
+ xcrun simctl list devices
+ APP_PATH=$(find $HOME/Library/Developer/Xcode/DerivedData -name "*.app" | grep -i "Build/Products/Release" | head -n 1)
+ BUNDLE_ID=$(defaults read "$APP_PATH/Info" CFBundleIdentifier)
+ xcrun simctl install $UDID "$APP_PATH"
+ xcrun simctl launch $UDID $BUNDLE_ID
+ sleep 30 # Give the app some time to fully launch
+
+ - name: Debug - Check Simulator and App Status
+ run: |
+ xcrun simctl list devices
+ xcrun simctl diagnose
+ ps aux | grep Simulator
+ ps aux | grep $BUNDLE_ID
+
+ - name: Install Maestro CLI
+ run: |
+ curl -Ls "https://get.maestro.mobile.dev" | bash
+ echo "${HOME}/.maestro/bin" >> $GITHUB_PATH
+ maestro --version
+
+ - name: Run tests
+ run: |
+ echo "Running Maestro tests..."
+ $HOME/.maestro/bin/maestro --host 127.0.0.1 --timeout 180 test e2e/main-flow-ios.yaml
+
+ - name: Upload Maestro logs
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: maestro-ios-logs
+ path: ~/.maestro/logs
+
+ - name: Upload build logs and app
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: ios-build-logs-and-app
+ path: |
+ ios/build
+ $HOME/Library/Developer/Xcode/DerivedData
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index e434836..4bf1372 100644
--- a/.gitignore
+++ b/.gitignore
@@ -51,6 +51,7 @@ yarn-error.log
**/fastlane/Preview.html
**/fastlane/screenshots
**/fastlane/test_output
+ios/fastlane/
# Bundle artifact
*.jsbundle
diff --git a/Gemfile b/Gemfile
index 8d72c37..1595bff 100644
--- a/Gemfile
+++ b/Gemfile
@@ -7,3 +7,4 @@ ruby ">= 2.6.10"
# bound in the template on Cocoapods with next React Native release.
gem 'cocoapods', '>= 1.13', '< 1.15'
gem 'activesupport', '>= 6.1.7.5', '< 7.1.0'
+gem "fastlane"
diff --git a/Gemfile.lock b/Gemfile.lock
index fd340c8..7dc5875 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -5,18 +5,35 @@ GEM
base64
nkf
rexml
- activesupport (6.1.7.8)
+ activesupport (7.0.8.4)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
- zeitwerk (~> 2.3)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
algoliasearch (1.27.5)
httpclient (~> 2.8, >= 2.8.3)
json (>= 1.5.1)
+ artifactory (3.0.17)
atomos (0.1.3)
+ aws-eventstream (1.3.0)
+ aws-partitions (1.986.0)
+ aws-sdk-core (3.209.1)
+ aws-eventstream (~> 1, >= 1.3.0)
+ aws-partitions (~> 1, >= 1.651.0)
+ aws-sigv4 (~> 1.9)
+ jmespath (~> 1, >= 1.6.1)
+ aws-sdk-kms (1.94.0)
+ aws-sdk-core (~> 3, >= 3.207.0)
+ aws-sigv4 (~> 1.5)
+ aws-sdk-s3 (1.167.0)
+ aws-sdk-core (~> 3, >= 3.207.0)
+ aws-sdk-kms (~> 1)
+ aws-sigv4 (~> 1.5)
+ aws-sigv4 (1.10.0)
+ aws-eventstream (~> 1, >= 1.0.2)
+ babosa (1.0.4)
base64 (0.2.0)
claide (1.1.0)
cocoapods (1.14.3)
@@ -56,42 +73,202 @@ GEM
nap (>= 0.8, < 2.0)
netrc (~> 0.11)
cocoapods-try (1.2.0)
+ colored (1.2)
colored2 (3.1.2)
- concurrent-ruby (1.3.3)
+ commander (4.6.0)
+ highline (~> 2.0.0)
+ concurrent-ruby (1.3.4)
+ declarative (0.0.20)
+ digest-crc (0.6.5)
+ rake (>= 12.0.0, < 14.0.0)
+ domain_name (0.6.20240107)
+ dotenv (2.8.1)
+ emoji_regex (3.2.3)
escape (0.0.4)
ethon (0.16.0)
ffi (>= 1.15.0)
+ excon (0.112.0)
+ faraday (1.10.4)
+ faraday-em_http (~> 1.0)
+ faraday-em_synchrony (~> 1.0)
+ faraday-excon (~> 1.1)
+ faraday-httpclient (~> 1.0)
+ faraday-multipart (~> 1.0)
+ faraday-net_http (~> 1.0)
+ faraday-net_http_persistent (~> 1.0)
+ faraday-patron (~> 1.0)
+ faraday-rack (~> 1.0)
+ faraday-retry (~> 1.0)
+ ruby2_keywords (>= 0.0.4)
+ faraday-cookie_jar (0.0.7)
+ faraday (>= 0.8.0)
+ http-cookie (~> 1.0.0)
+ faraday-em_http (1.0.0)
+ faraday-em_synchrony (1.0.0)
+ faraday-excon (1.1.0)
+ faraday-httpclient (1.0.1)
+ faraday-multipart (1.0.4)
+ multipart-post (~> 2)
+ faraday-net_http (1.0.2)
+ faraday-net_http_persistent (1.2.0)
+ faraday-patron (1.0.0)
+ faraday-rack (1.0.0)
+ faraday-retry (1.0.3)
+ faraday_middleware (1.2.1)
+ faraday (~> 1.0)
+ fastimage (2.3.1)
+ fastlane (2.224.0)
+ CFPropertyList (>= 2.3, < 4.0.0)
+ addressable (>= 2.8, < 3.0.0)
+ artifactory (~> 3.0)
+ aws-sdk-s3 (~> 1.0)
+ babosa (>= 1.0.3, < 2.0.0)
+ bundler (>= 1.12.0, < 3.0.0)
+ colored (~> 1.2)
+ commander (~> 4.6)
+ dotenv (>= 2.1.1, < 3.0.0)
+ emoji_regex (>= 0.1, < 4.0)
+ excon (>= 0.71.0, < 1.0.0)
+ faraday (~> 1.0)
+ faraday-cookie_jar (~> 0.0.6)
+ faraday_middleware (~> 1.0)
+ fastimage (>= 2.1.0, < 3.0.0)
+ gh_inspector (>= 1.1.2, < 2.0.0)
+ google-apis-androidpublisher_v3 (~> 0.3)
+ google-apis-playcustomapp_v1 (~> 0.1)
+ google-cloud-env (>= 1.6.0, < 2.0.0)
+ google-cloud-storage (~> 1.31)
+ highline (~> 2.0)
+ http-cookie (~> 1.0.5)
+ json (< 3.0.0)
+ jwt (>= 2.1.0, < 3)
+ mini_magick (>= 4.9.4, < 5.0.0)
+ multipart-post (>= 2.0.0, < 3.0.0)
+ naturally (~> 2.2)
+ optparse (>= 0.1.1, < 1.0.0)
+ plist (>= 3.1.0, < 4.0.0)
+ rubyzip (>= 2.0.0, < 3.0.0)
+ security (= 0.1.5)
+ simctl (~> 1.6.3)
+ terminal-notifier (>= 2.0.0, < 3.0.0)
+ terminal-table (~> 3)
+ tty-screen (>= 0.6.3, < 1.0.0)
+ tty-spinner (>= 0.8.0, < 1.0.0)
+ word_wrap (~> 1.0.0)
+ xcodeproj (>= 1.13.0, < 2.0.0)
+ xcpretty (~> 0.3.0)
+ xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
ffi (1.17.0)
fourflusher (2.3.1)
fuzzy_match (2.0.4)
gh_inspector (1.1.3)
+ google-apis-androidpublisher_v3 (0.54.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-apis-core (0.11.3)
+ addressable (~> 2.5, >= 2.5.1)
+ googleauth (>= 0.16.2, < 2.a)
+ httpclient (>= 2.8.1, < 3.a)
+ mini_mime (~> 1.0)
+ representable (~> 3.0)
+ retriable (>= 2.0, < 4.a)
+ rexml
+ google-apis-iamcredentials_v1 (0.17.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-apis-playcustomapp_v1 (0.13.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-apis-storage_v1 (0.31.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-cloud-core (1.7.1)
+ google-cloud-env (>= 1.0, < 3.a)
+ google-cloud-errors (~> 1.0)
+ google-cloud-env (1.6.0)
+ faraday (>= 0.17.3, < 3.0)
+ google-cloud-errors (1.4.0)
+ google-cloud-storage (1.47.0)
+ addressable (~> 2.8)
+ digest-crc (~> 0.4)
+ google-apis-iamcredentials_v1 (~> 0.1)
+ google-apis-storage_v1 (~> 0.31.0)
+ google-cloud-core (~> 1.6)
+ googleauth (>= 0.16.2, < 2.a)
+ mini_mime (~> 1.0)
+ googleauth (1.8.1)
+ faraday (>= 0.17.3, < 3.a)
+ jwt (>= 1.4, < 3.0)
+ multi_json (~> 1.11)
+ os (>= 0.9, < 2.0)
+ signet (>= 0.16, < 2.a)
+ highline (2.0.3)
+ http-cookie (1.0.7)
+ domain_name (~> 0.5)
httpclient (2.8.3)
- i18n (1.14.5)
+ i18n (1.14.6)
concurrent-ruby (~> 1.0)
+ jmespath (1.6.2)
json (2.7.2)
- minitest (5.24.1)
+ jwt (2.9.3)
+ base64
+ mini_magick (4.13.2)
+ mini_mime (1.1.5)
+ minitest (5.25.1)
molinillo (0.8.0)
+ multi_json (1.15.0)
+ multipart-post (2.4.1)
nanaimo (0.3.0)
nap (1.1.0)
+ naturally (2.2.1)
netrc (0.11.0)
nkf (0.2.0)
+ optparse (0.5.0)
+ os (1.1.4)
+ plist (3.7.1)
public_suffix (4.0.7)
- rexml (3.2.9)
- strscan
+ rake (13.2.1)
+ representable (3.2.0)
+ declarative (< 0.1.0)
+ trailblazer-option (>= 0.1.1, < 0.2.0)
+ uber (< 0.2.0)
+ retriable (3.1.2)
+ rexml (3.3.8)
+ rouge (2.0.7)
ruby-macho (2.5.1)
- strscan (3.1.0)
+ ruby2_keywords (0.0.5)
+ rubyzip (2.3.2)
+ security (0.1.5)
+ signet (0.19.0)
+ addressable (~> 2.8)
+ faraday (>= 0.17.5, < 3.a)
+ jwt (>= 1.5, < 3.0)
+ multi_json (~> 1.10)
+ simctl (1.6.10)
+ CFPropertyList
+ naturally
+ terminal-notifier (2.0.0)
+ terminal-table (3.0.2)
+ unicode-display_width (>= 1.1.1, < 3)
+ trailblazer-option (0.1.2)
+ tty-cursor (0.7.1)
+ tty-screen (0.8.2)
+ tty-spinner (0.9.3)
+ tty-cursor (~> 0.7)
typhoeus (1.4.1)
ethon (>= 0.9.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
- xcodeproj (1.24.0)
+ uber (0.1.0)
+ unicode-display_width (2.6.0)
+ word_wrap (1.0.0)
+ xcodeproj (1.25.1)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.3.0)
- rexml (~> 3.2.4)
- zeitwerk (2.6.17)
+ rexml (>= 3.3.6, < 4.0)
+ xcpretty (0.3.0)
+ rouge (~> 2.0.7)
+ xcpretty-travis-formatter (1.0.1)
+ xcpretty (~> 0.2, >= 0.0.7)
PLATFORMS
ruby
@@ -99,9 +276,10 @@ PLATFORMS
DEPENDENCIES
activesupport (>= 6.1.7.5, < 7.1.0)
cocoapods (>= 1.13, < 1.15)
+ fastlane
RUBY VERSION
- ruby 2.6.10p210
+ ruby 3.3.4p94
BUNDLED WITH
- 1.17.2
+ 2.5.11
diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile
new file mode 100644
index 0000000..7553d2a
--- /dev/null
+++ b/android/fastlane/Fastfile
@@ -0,0 +1,21 @@
+
+default_platform(:android)
+
+# platform :android do
+# desc "Build development APK"
+# lane :build_dev do
+# gradle(
+# task: "clean assembleDebug",
+# project_dir: "./"
+# )
+# end
+# end
+
+
+platform :android do
+ desc "Build and install the app"
+ lane :build_and_install do
+ gradle(task: "assembleDebug")
+ gradle(task: "installDebug")
+ end
+end
\ No newline at end of file
diff --git a/android/fastlane/README.md b/android/fastlane/README.md
new file mode 100644
index 0000000..927b202
--- /dev/null
+++ b/android/fastlane/README.md
@@ -0,0 +1,32 @@
+fastlane documentation
+----
+
+# Installation
+
+Make sure you have the latest version of the Xcode command line tools installed:
+
+```sh
+xcode-select --install
+```
+
+For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)
+
+# Available Actions
+
+## Android
+
+### android build_dev
+
+```sh
+[bundle exec] fastlane android build_dev
+```
+
+Build development APK
+
+----
+
+This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
+
+More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools).
+
+The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
diff --git a/e2e/main-flow-ios.yaml b/e2e/main-flow-ios.yaml
index 6c89ac9..f5e9688 100644
--- a/e2e/main-flow-ios.yaml
+++ b/e2e/main-flow-ios.yaml
@@ -1,4 +1,4 @@
-appId: com.weatherapp
+appId: com.weatherApp.callstack
---
- launchApp
- tapOn:
diff --git a/ios/Fastlane/Fastfile b/ios/Fastlane/Fastfile
new file mode 100644
index 0000000..af45462
--- /dev/null
+++ b/ios/Fastlane/Fastfile
@@ -0,0 +1,43 @@
+default_platform(:ios)
+
+platform :ios do
+ desc "Build the app for simulator with debugging"
+ lane :build_for_testing do
+ cocoapods
+
+ puts "Current directory: #{Dir.pwd}"
+ puts "Xcode version: #{`xcodebuild -version`}"
+
+ derived_data_path = File.expand_path("./derived_data")
+ output_directory = File.join(derived_data_path, "Build", "Products")
+ puts "Derived data path: #{derived_data_path}"
+ puts "Output directory: #{output_directory}"
+
+ gym(
+ scheme: "weatherApp",
+ workspace: "weatherApp.xcworkspace",
+ configuration: "Debug",
+ destination: "generic/platform=iOS Simulator",
+ derived_data_path: derived_data_path,
+ output_directory: output_directory,
+ output_name: "weatherApp",
+ skip_archive: true,
+ skip_package_ipa: true,
+ include_symbols: false,
+ include_bitcode: false,
+ buildlog_path: derived_data_path,
+ xcargs: "MODULEMAP_FILE=$(pwd)/Pods/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap",
+ verbose: true
+ )
+
+ puts "Contents of derived data directory:"
+ puts `find #{derived_data_path} -name "*.app"`
+
+ app_path = Dir.glob("#{output_directory}/Debug-iphonesimulator/*.app").first
+ if app_path
+ puts "App built successfully at: #{app_path}"
+ else
+ UI.user_error!("No .app file found in output directory")
+ end
+ end
+end
\ No newline at end of file
diff --git a/ios/Fastlane/README.md b/ios/Fastlane/README.md
new file mode 100644
index 0000000..e2ad1e2
--- /dev/null
+++ b/ios/Fastlane/README.md
@@ -0,0 +1,32 @@
+fastlane documentation
+----
+
+# Installation
+
+Make sure you have the latest version of the Xcode command line tools installed:
+
+```sh
+xcode-select --install
+```
+
+For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)
+
+# Available Actions
+
+## iOS
+
+### ios build_for_testing
+
+```sh
+[bundle exec] fastlane ios build_for_testing
+```
+
+Build the app for simulator with debugging
+
+----
+
+This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
+
+More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools).
+
+The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 9bd7b67..4b99d47 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -1168,7 +1168,7 @@ PODS:
- React-utils (= 0.74.5)
- RNPermissions (4.1.5):
- React-Core
- - RNScreens (3.34.0):
+ - RNScreens (3.29.0):
- DoubleConversion
- glog
- hermes-engine
@@ -1184,7 +1184,6 @@ PODS:
- React-ImageManager
- React-NativeModulesApple
- React-RCTFabric
- - React-RCTImage
- React-rendererdebug
- React-utils
- ReactCommon/turbomodule/bridging
@@ -1436,11 +1435,11 @@ SPEC CHECKSUMS:
React-utils: f242eb7e7889419d979ca0e1c02ccc0ea6e43b29
ReactCommon: f7da14a8827b72704169a48c929bcde802698361
RNPermissions: a4c964f030841f35d918ab3248df9dec9db5f44d
- RNScreens: aa943ad421c3ced3ef5a47ede02b0cbfc43a012e
+ RNScreens: 23dad53fc9db1da2c93e647ae33fd7ce2bd49d60
RNSVG: b986585e367f4a49d8aa43065066cc9c290b3d9b
SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d
Yoga: 950bbfd7e6f04790fdb51149ed51df41f329fcc8
PODFILE CHECKSUM: d7036f03f48d6ba1c7871b1742898e0d365876b6
-COCOAPODS: 1.15.2
+COCOAPODS: 1.14.3
diff --git a/ios/weatherApp.xcodeproj/project.pbxproj b/ios/weatherApp.xcodeproj/project.pbxproj
index 7556c3f..474764b 100644
--- a/ios/weatherApp.xcodeproj/project.pbxproj
+++ b/ios/weatherApp.xcodeproj/project.pbxproj
@@ -500,7 +500,10 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = AJNMX63HJN;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = weatherApp/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = weatherApp;
@@ -514,8 +517,9 @@
"-ObjC",
"-lc++",
);
- PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_BUNDLE_IDENTIFIER = com.weatherApp.callstack;
PRODUCT_NAME = weatherApp;
+ PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "weatherApp-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
@@ -529,7 +533,10 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = AJNMX63HJN;
INFOPLIST_FILE = weatherApp/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = weatherApp;
LD_RUNPATH_SEARCH_PATHS = (
@@ -542,8 +549,9 @@
"-ObjC",
"-lc++",
);
- PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_BUNDLE_IDENTIFIER = com.weatherApp.callstack;
PRODUCT_NAME = weatherApp;
+ PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "weatherApp-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
diff --git a/ios/weatherApp/Info.plist b/ios/weatherApp/Info.plist
index b7b1c7e..16ed186 100644
--- a/ios/weatherApp/Info.plist
+++ b/ios/weatherApp/Info.plist
@@ -26,7 +26,6 @@
NSAppTransportSecurity
-
NSAllowsArbitraryLoads
NSAllowsLocalNetworking
diff --git a/jest-setup.ts b/jest-setup.ts
index aa5f7b8..64126e4 100644
--- a/jest-setup.ts
+++ b/jest-setup.ts
@@ -11,8 +11,8 @@ afterEach(() => server.resetHandlers());
// Clean up after the tests are finished.
afterAll(() => server.close());
-
jest.mock('react-native-permissions', () =>
- require('react-native-permissions/mock'),
+ require('react-native-permissions/mock'),
);
-
\ No newline at end of file
+
+jest.setTimeout(30000);
diff --git a/jest.config.js b/jest.config.js
index f041f2d..e52f030 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -7,6 +7,6 @@ module.exports = {
'\\.svg': '/__mocks__/svgMock.js',
},
transformIgnorePatterns: [
- "node_modules/(?!(react-native|@react-native|react-native-permissions)/)"
+ 'node_modules/(?!(react-native|@react-native|react-native-permissions)/)',
],
};
diff --git a/package.json b/package.json
index 8d07a8c..b6600dc 100644
--- a/package.json
+++ b/package.json
@@ -6,6 +6,7 @@
"android": "react-native run-android",
"ios": "react-native run-ios",
"lint": "eslint .",
+ "lint:fix": "eslint . --fix",
"start": "react-native start",
"test": "jest",
"test-e2e-ios": "maestro test e2e/main-flow-ios.yaml",
@@ -21,7 +22,7 @@
"react-native": "0.74.5",
"react-native-permissions": "^4.1.5",
"react-native-safe-area-context": "^4.10.8",
- "react-native-screens": "^3.34.0",
+ "react-native-screens": "3.29.0",
"react-native-svg": "^15.5.0",
"react-native-url-polyfill": "^2.0.0"
},
diff --git a/src/components/WeatherListItem.tsx b/src/components/WeatherListItem.tsx
index 9ba509d..3421fc6 100644
--- a/src/components/WeatherListItem.tsx
+++ b/src/components/WeatherListItem.tsx
@@ -6,10 +6,10 @@ import {useNavigation} from '@react-navigation/native';
type WeatherListItemProps = {
item: Weather;
- testID: string;
+ index: number;
};
-const WeatherListItem = ({item, testID}: WeatherListItemProps) => {
+const WeatherListItem = ({item, index}: WeatherListItemProps) => {
const navigation = useNavigation();
const onPress = () => {
@@ -17,8 +17,8 @@ const WeatherListItem = ({item, testID}: WeatherListItemProps) => {
};
return (
-
-
+
+
);
};
diff --git a/src/screens/WeatherListScreen/WeatherListScreen.tsx b/src/screens/WeatherListScreen/WeatherListScreen.tsx
index a9b2174..e851456 100644
--- a/src/screens/WeatherListScreen/WeatherListScreen.tsx
+++ b/src/screens/WeatherListScreen/WeatherListScreen.tsx
@@ -29,7 +29,7 @@ const WeatherListScreen = () => {
const renderItem = useCallback(
({item, index}: {item: Weather; index: number}) => (
-
+
),
[],
);
diff --git a/yarn.lock b/yarn.lock
index 5ba6bb6..2202a79 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6305,10 +6305,10 @@ react-native-safe-area-context@^4.10.8:
resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.10.8.tgz#038bd6a4853a38189c186d119302943c8d13f56f"
integrity sha512-Jx1lovhvIdYygg0UsMCBUJN0Wvj9GlA5bbcBLzjZf93uJpNHzaiHC4hR280+sNVK1+/pMHEyEkXVHDZE5JWn0w==
-react-native-screens@^3.34.0:
- version "3.34.0"
- resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-3.34.0.tgz#1291a460c5bc59e2ba581b42d40fa9a58d3b1197"
- integrity sha512-8ri3Pd9QcpfXnVckOe/Lnto+BXmSPHV/Q0RB0XW0gDKsCv5wi5k7ez7g1SzgiYHl29MSdiqgjH30zUyOOowOaw==
+react-native-screens@3.29.0:
+ version "3.29.0"
+ resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-3.29.0.tgz#1dee0326defbc1d4ef4e68287abb32a8e6b76b29"
+ integrity sha512-yB1GoAMamFAcYf4ku94uBPn0/ani9QG7NdI98beJ5cet2YFESYYzuEIuU+kt+CNRcO8qqKeugxlfgAa3HyTqlg==
dependencies:
react-freeze "^1.0.0"
warn-once "^0.1.0"