2
									
								
								.github/workflows/.tests-javascript.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/.tests-javascript.yml
									
									
									
									
										vendored
									
									
								
							@@ -5,12 +5,14 @@ on:
 | 
				
			|||||||
    paths: ['fittrackee_client/**']
 | 
					    paths: ['fittrackee_client/**']
 | 
				
			||||||
  pull_request:
 | 
					  pull_request:
 | 
				
			||||||
    paths: ['fittrackee_client/**']
 | 
					    paths: ['fittrackee_client/**']
 | 
				
			||||||
 | 
					    types: [opened, synchronize, reopened]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
env:
 | 
					env:
 | 
				
			||||||
  working-directory: fittrackee_client
 | 
					  working-directory: fittrackee_client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  javascript:
 | 
					  javascript:
 | 
				
			||||||
 | 
					    if: ${{ github.event_name == 'push' || github.event.pull_request.head.repo.fork }}
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@v3
 | 
					      - uses: actions/checkout@v3
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										20
									
								
								.github/workflows/.tests-python.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/.tests-python.yml
									
									
									
									
										vendored
									
									
								
							@@ -2,9 +2,10 @@ name: Python CI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
on:
 | 
					on:
 | 
				
			||||||
  push:
 | 
					  push:
 | 
				
			||||||
    paths-ignore: ['docs/**', 'docsrc/**', 'fittrackee_client/**', '*.md']
 | 
					    paths-ignore: ['docs/**', 'docsrc/**', 'docker/**', 'fittrackee_client/**', '*.md']
 | 
				
			||||||
  pull_request:
 | 
					  pull_request:
 | 
				
			||||||
    paths-ignore: ['docs/**', 'docsrc/**', 'fittrackee_client/**', '*.md']
 | 
					    paths-ignore: ['docs/**', 'docsrc/**', 'docker/**', 'fittrackee_client/**', '*.md']
 | 
				
			||||||
 | 
					    types: [opened, synchronize, reopened]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
env:
 | 
					env:
 | 
				
			||||||
  APP_SETTINGS: fittrackee.config.TestingConfig
 | 
					  APP_SETTINGS: fittrackee.config.TestingConfig
 | 
				
			||||||
@@ -15,6 +16,7 @@ env:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  python:
 | 
					  python:
 | 
				
			||||||
 | 
					    if: ${{ github.event_name == 'push' || github.event.pull_request.head.repo.fork }}
 | 
				
			||||||
    name: python ${{ matrix.python-version }} (postgresql 15)
 | 
					    name: python ${{ matrix.python-version }} (postgresql 15)
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    container: python:${{ matrix.python-version }}
 | 
					    container: python:${{ matrix.python-version }}
 | 
				
			||||||
@@ -54,9 +56,10 @@ jobs:
 | 
				
			|||||||
        if: matrix.python-version == '3.11'
 | 
					        if: matrix.python-version == '3.11'
 | 
				
			||||||
        run: mypy fittrackee
 | 
					        run: mypy fittrackee
 | 
				
			||||||
      - name: Pytest
 | 
					      - name: Pytest
 | 
				
			||||||
        run: pytest fittrackee -p no:warnings --cov fittrackee --cov-report term-missing
 | 
					        run: pytest fittrackee -p no:warnings --cov fittrackee --cov-report term-missing --maxfail=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  postgresql:
 | 
					  postgresql:
 | 
				
			||||||
 | 
					    if: ${{ github.event_name == 'push' || github.event.pull_request.head.repo.fork }}
 | 
				
			||||||
    name: postgresql ${{ matrix.psql-version }} (python 3.11)
 | 
					    name: postgresql ${{ matrix.psql-version }} (python 3.11)
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    container: python:3.11
 | 
					    container: python:3.11
 | 
				
			||||||
@@ -84,9 +87,10 @@ jobs:
 | 
				
			|||||||
          poetry config virtualenvs.create false
 | 
					          poetry config virtualenvs.create false
 | 
				
			||||||
          poetry install --no-interaction --quiet
 | 
					          poetry install --no-interaction --quiet
 | 
				
			||||||
      - name: Pytest
 | 
					      - name: Pytest
 | 
				
			||||||
        run: pytest fittrackee -p no:warnings --cov fittrackee --cov-report term-missing
 | 
					        run: pytest fittrackee -p no:warnings --cov fittrackee --cov-report term-missing --maxfail=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  end2end:
 | 
					  end2end:
 | 
				
			||||||
 | 
					    if: ${{ github.event_name == 'push' || github.event.pull_request.head.repo.fork }}
 | 
				
			||||||
    name: e2e tests
 | 
					    name: e2e tests
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    needs: ["python"]
 | 
					    needs: ["python"]
 | 
				
			||||||
@@ -129,9 +133,10 @@ jobs:
 | 
				
			|||||||
          export TEST_APP_URL=http://$(hostname --ip-address):5000
 | 
					          export TEST_APP_URL=http://$(hostname --ip-address):5000
 | 
				
			||||||
          sleep 5
 | 
					          sleep 5
 | 
				
			||||||
          nohup flask worker --processes=1 >> nohup.out 2>&1 &
 | 
					          nohup flask worker --processes=1 >> nohup.out 2>&1 &
 | 
				
			||||||
          pytest e2e --driver Remote --capability browserName firefox --selenium-host selenium --selenium-port 4444
 | 
					          pytest e2e --driver Remote --capability browserName firefox --selenium-host selenium --selenium-port 4444 --maxfail=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  end2end_package:
 | 
					  end2end_package:
 | 
				
			||||||
 | 
					    if: ${{ github.event_name == 'push' || github.event.pull_request.head.repo.fork }}
 | 
				
			||||||
    name: e2e tests with package
 | 
					    name: e2e tests with package
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    needs: ["python"]
 | 
					    needs: ["python"]
 | 
				
			||||||
@@ -182,9 +187,10 @@ jobs:
 | 
				
			|||||||
          export TEST_APP_URL=http://$(hostname --ip-address):5000
 | 
					          export TEST_APP_URL=http://$(hostname --ip-address):5000
 | 
				
			||||||
          sleep 5
 | 
					          sleep 5
 | 
				
			||||||
          nohup flask worker --processes=1 >> nohup.out 2>&1 &
 | 
					          nohup flask worker --processes=1 >> nohup.out 2>&1 &
 | 
				
			||||||
          pytest e2e --driver Remote --capability browserName firefox --selenium-host selenium --selenium-port 4444
 | 
					          pytest e2e --driver Remote --capability browserName firefox --selenium-host selenium --selenium-port 4444 --maxfail=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  end2end_package_update:
 | 
					  end2end_package_update:
 | 
				
			||||||
 | 
					    if: ${{ github.event_name == 'push' || github.event.pull_request.head.repo.fork }}
 | 
				
			||||||
    name: e2e tests after update
 | 
					    name: e2e tests after update
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    needs: ["python"]
 | 
					    needs: ["python"]
 | 
				
			||||||
@@ -239,4 +245,4 @@ jobs:
 | 
				
			|||||||
          export TEST_APP_URL=http://$(hostname --ip-address):5000
 | 
					          export TEST_APP_URL=http://$(hostname --ip-address):5000
 | 
				
			||||||
          sleep 5
 | 
					          sleep 5
 | 
				
			||||||
          nohup flask worker --processes=1 >> nohup.out 2>&1 &
 | 
					          nohup flask worker --processes=1 >> nohup.out 2>&1 &
 | 
				
			||||||
          pytest e2e --driver Remote --capability browserName firefox --selenium-host selenium --selenium-port 4444
 | 
					          pytest e2e --driver Remote --capability browserName firefox --selenium-host selenium --selenium-port 4444 --maxfail=1
 | 
				
			||||||
@@ -97,8 +97,8 @@ class TestingConfig(BaseConfig):
 | 
				
			|||||||
    SECRET_KEY = 'test key'  # nosec
 | 
					    SECRET_KEY = 'test key'  # nosec
 | 
				
			||||||
    BCRYPT_LOG_ROUNDS = 4
 | 
					    BCRYPT_LOG_ROUNDS = 4
 | 
				
			||||||
    TOKEN_EXPIRATION_DAYS = 0
 | 
					    TOKEN_EXPIRATION_DAYS = 0
 | 
				
			||||||
    TOKEN_EXPIRATION_SECONDS = 3
 | 
					    TOKEN_EXPIRATION_SECONDS = 60
 | 
				
			||||||
    PASSWORD_TOKEN_EXPIRATION_SECONDS = 3
 | 
					    PASSWORD_TOKEN_EXPIRATION_SECONDS = 60
 | 
				
			||||||
    UI_URL = 'http://0.0.0.0:5000'
 | 
					    UI_URL = 'http://0.0.0.0:5000'
 | 
				
			||||||
    SENDER_EMAIL = 'fittrackee@example.com'
 | 
					    SENDER_EMAIL = 'fittrackee@example.com'
 | 
				
			||||||
    OAUTH2_TOKEN_EXPIRES_IN = {
 | 
					    OAUTH2_TOKEN_EXPIRES_IN = {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2128,7 +2128,7 @@ class TestPasswordResetRequest(ApiTestCaseMixin):
 | 
				
			|||||||
                'email': user_1.email,
 | 
					                'email': user_1.email,
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                'expiration_delay': '3 seconds',
 | 
					                'expiration_delay': 'a minute',
 | 
				
			||||||
                'username': user_1.username,
 | 
					                'username': user_1.username,
 | 
				
			||||||
                'password_reset_url': (
 | 
					                'password_reset_url': (
 | 
				
			||||||
                    f'http://0.0.0.0:5000/password-reset?token={token}'
 | 
					                    f'http://0.0.0.0:5000/password-reset?token={token}'
 | 
				
			||||||
@@ -2235,7 +2235,7 @@ class TestPasswordUpdate(ApiTestCaseMixin):
 | 
				
			|||||||
        token = get_user_token(user_1.id, password_reset=True)
 | 
					        token = get_user_token(user_1.id, password_reset=True)
 | 
				
			||||||
        client = app.test_client()
 | 
					        client = app.test_client()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        with freeze_time(now + timedelta(seconds=4)):
 | 
					        with freeze_time(now + timedelta(seconds=61)):
 | 
				
			||||||
            response = client.post(
 | 
					            response = client.post(
 | 
				
			||||||
                '/api/auth/password/update',
 | 
					                '/api/auth/password/update',
 | 
				
			||||||
                data=json.dumps(
 | 
					                data=json.dumps(
 | 
				
			||||||
@@ -2649,7 +2649,7 @@ class TestUserLogout(ApiTestCaseMixin):
 | 
				
			|||||||
        client, auth_token = self.get_test_client_and_auth_token(
 | 
					        client, auth_token = self.get_test_client_and_auth_token(
 | 
				
			||||||
            app, user_1.email
 | 
					            app, user_1.email
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        with freeze_time(now + timedelta(seconds=4)):
 | 
					        with freeze_time(now + timedelta(seconds=61)):
 | 
				
			||||||
            response = client.post(
 | 
					            response = client.post(
 | 
				
			||||||
                '/api/auth/logout',
 | 
					                '/api/auth/logout',
 | 
				
			||||||
                headers=dict(Authorization=f'Bearer {auth_token}'),
 | 
					                headers=dict(Authorization=f'Bearer {auth_token}'),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -376,7 +376,7 @@ class TestUserModelToken:
 | 
				
			|||||||
    ) -> None:
 | 
					    ) -> None:
 | 
				
			||||||
        auth_token = user_1.encode_auth_token(user_1.id)
 | 
					        auth_token = user_1.encode_auth_token(user_1.id)
 | 
				
			||||||
        now = datetime.utcnow()
 | 
					        now = datetime.utcnow()
 | 
				
			||||||
        with freeze_time(now + timedelta(seconds=4)):
 | 
					        with freeze_time(now + timedelta(seconds=61)):
 | 
				
			||||||
            assert (
 | 
					            assert (
 | 
				
			||||||
                User.decode_auth_token(auth_token)
 | 
					                User.decode_auth_token(auth_token)
 | 
				
			||||||
                == 'signature expired, please log in again'
 | 
					                == 'signature expired, please log in again'
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user