Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions .github/scripts/setup_test_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from osf.models import OSFUser, Node, Institution

WIKI_ENABLED = os.environ.get('WIKI_ENABLED', 'false').lower() == 'true'
MAPCORE_GROUP_ENABLED = os.environ.get('MAPCORE_GROUP_ENABLED', 'false').lower() == 'true'

INSTITUTION_NAME = 'Virginia Tech [Test]'

Expand Down Expand Up @@ -68,6 +69,16 @@
'institution': 'Massachusetts Institute of Technology [Test]',
'skip_project': True, # Dedicated user for project limit tests; no pre-created project
},
{
'username': 'testuser6@example.com',
'fullname': 'Test User 6',
'given_name': 'Test',
'family_name': 'User 6',
'given_name_ja': 'テスト',
'family_name_ja': 'ユーザー6',
'password': 'testpass666',
'skip_project': True,
},
]

def create_rdmuserkey(user):
Expand Down Expand Up @@ -202,6 +213,70 @@ def create_rdmuserkey(user):
print(f"PROJECT_ID_{username}: {project._id}")
print(f"PROJECT_NAME_{username}: {project.title}")

# Create groups for Mapcore group tests in CI
# Only executed when running the user-mapcore-group test group (MAPCORE_GROUP_ENABLED=true)
if MAPCORE_GROUP_ENABLED:
from osf.models.mapcore_group import MapCoreGroup
from osf.models.mapcore_user_group import MapCoreUserGroup

mapcore_groups_data = [
{
'group_id': 'GroupA',
'usernames': [
'teststaff@example.com',
'testuser2@example.com',
],
},
{
'group_id': 'GroupB',
'usernames': [
'teststaff@example.com',
'testuser6@example.com',
],
},
{
'group_id': 'GroupC',
'usernames': [
'teststaff@example.com',
'testuser4@example.com',
],
},
{
'group_id': 'GroupD',
'usernames': [
'teststaff@example.com',
'testuser5@example.com',
],
},
]

for group_data in mapcore_groups_data:
group, created = MapCoreGroup.objects.get_or_create(_id=group_data['group_id'])
if created:
print(f"Created MapCoreGroup: {group._id}")
else:
print(f"MapCoreGroup already exists: {group._id}")

for username in group_data['usernames']:
user = OSFUser.objects.filter(username=username).first()
if user is None:
raise RuntimeError(f'MAPCORE setup failed: user not found: {username}')

user_group, created = MapCoreUserGroup.objects.get_or_create(
mapcore_group=group,
user=user,
defaults={'is_deleted': False},
)
if created:
print(f"Created MapCoreUserGroup: {user.username} -> {group._id}")
else:
if user_group.is_deleted:
user_group.is_deleted = False
user_group.save()
print(f"Restored MapCoreUserGroup: {user.username} -> {group._id}")
else:
print(f"MapCoreUserGroup already exists: {user.username} -> {group._id}")

# Affiliate users with institution
for user_data in test_users:
user = OSFUser.objects.get(username=user_data['username'])
Expand Down
60 changes: 56 additions & 4 deletions .github/workflows/e2e-test.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: E2E Test Execution
name: E2E Test Execution

on:
push:
Expand Down Expand Up @@ -124,6 +124,7 @@ jobs:
jupyterhub_enabled: false
flowable_enabled: false
wiki_enabled: false
mapcore_group_enabled: false
- name: user-metadata
display_name: "User Tests (Metadata)"
include_admin: false
Expand All @@ -139,6 +140,7 @@ jobs:
jupyterhub_enabled: false
flowable_enabled: false
wiki_enabled: false
mapcore_group_enabled: false
- name: admin
display_name: "Admin Tests"
include_admin: true
Expand All @@ -152,6 +154,7 @@ jobs:
jupyterhub_enabled: false
flowable_enabled: false
wiki_enabled: false
mapcore_group_enabled: false
exclude_notebooks: |
テスト手順-管理者機能-ログイン可否設定.ipynb
テスト手順-管理者機能-ノード管理.ipynb
Expand Down Expand Up @@ -195,6 +198,7 @@ jobs:
jupyterhub_enabled: false
flowable_enabled: false
wiki_enabled: false
mapcore_group_enabled: false
- name: migration-from-20250906-weko
display_name: "Migration Test from 20250906 (WEKO)"
include_admin: true
Expand Down Expand Up @@ -222,6 +226,7 @@ jobs:
jupyterhub_enabled: false
flowable_enabled: false
wiki_enabled: false
mapcore_group_enabled: false
- name: user-minio
display_name: "User Tests (MinIO)"
include_admin: false
Expand All @@ -238,6 +243,7 @@ jobs:
jupyterhub_enabled: false
flowable_enabled: false
wiki_enabled: false
mapcore_group_enabled: false
- name: admin-minio
display_name: "Admin Tests (MinIO)"
include_admin: true
Expand All @@ -253,6 +259,7 @@ jobs:
jupyterhub_enabled: false
flowable_enabled: false
wiki_enabled: false
mapcore_group_enabled: false
- name: user-weko-direct
display_name: "User Tests (WEKO Direct)"
include_admin: true
Expand All @@ -268,6 +275,7 @@ jobs:
jupyterhub_enabled: false
flowable_enabled: false
wiki_enabled: false
mapcore_group_enabled: false
- name: user-weko-workflow
display_name: "User Tests (WEKO Workflow)"
include_admin: true
Expand All @@ -283,6 +291,7 @@ jobs:
jupyterhub_enabled: false
flowable_enabled: false
wiki_enabled: false
mapcore_group_enabled: false
- name: user-jupyterhub
display_name: "User Tests (JupyterHub)"
include_admin: false
Expand All @@ -297,6 +306,7 @@ jobs:
jupyterhub_enabled: true
flowable_enabled: false
wiki_enabled: false
mapcore_group_enabled: false
- name: user-workflow-roles
display_name: "User Tests (Flowable Roles)"
include_admin: true
Expand All @@ -312,6 +322,7 @@ jobs:
flowable_enabled: true
workflow_test_mode: roles
wiki_enabled: false
mapcore_group_enabled: false
- name: user-workflow-forms
display_name: "User Tests (Flowable Forms)"
include_admin: true
Expand All @@ -327,6 +338,7 @@ jobs:
flowable_enabled: true
workflow_test_mode: forms
wiki_enabled: false
mapcore_group_enabled: false
- name: user-workflow-batch
display_name: "User Tests (Flowable Batch)"
include_admin: true
Expand All @@ -343,6 +355,7 @@ jobs:
workflow_test_mode: batch
workflow_batch_project_count: 50
wiki_enabled: false
mapcore_group_enabled: false
- name: user-wiki
display_name: "User Tests (Wiki)"
include_admin: false
Expand All @@ -357,6 +370,7 @@ jobs:
jupyterhub_enabled: false
flowable_enabled: false
wiki_enabled: true
mapcore_group_enabled: false
- name: user-metadata-mibyo-db
display_name: "User Tests (Mibyo DB)"
include_admin: true
Expand All @@ -372,6 +386,22 @@ jobs:
jupyterhub_enabled: false
flowable_enabled: false
wiki_enabled: false
mapcore_group_enabled: false
- name: user-mapcore-group
display_name: "User Tests (Mapcore Group)"
include_admin: true
skip_admin: true
skip_metadata: true
skip_default_storage: true
skip_login: true
skip_130mb_upload: true
minio_enabled: false
weko_enabled: false
mibyo_db_enabled: false
jupyterhub_enabled: false
flowable_enabled: false
wiki_enabled: false
mapcore_group_enabled: true
name: E2E ${{ matrix.test-group.display_name }}
env:
MINIO_ENABLED: ${{ matrix.test-group.minio_enabled == true && 'true' || 'false' }}
Expand All @@ -382,6 +412,7 @@ jobs:
FLOWABLE_ENABLED: ${{ matrix.test-group.flowable_enabled == true && 'true' || 'false' }}
MIBYO_DB_ENABLED: ${{ matrix.test-group.mibyo_db_enabled == true && 'true' || 'false' }}
WIKI_ENABLED: ${{ (matrix.test-group.wiki_enabled == true || github.event.inputs.enable_wiki == 'true') && 'true' || 'false' }}
MAPCORE_GROUP_ENABLED: ${{ matrix.test-group.mapcore_group_enabled == true && 'true' || 'false' }}
MINIO_ROOT_USER: e2eadmin
MINIO_ROOT_PASSWORD: e2epassword123
MINIO_ALIAS: ci-minio
Expand Down Expand Up @@ -689,6 +720,7 @@ jobs:
if: matrix.test-group.migration_from != null
working-directory: RDM-osf.io
run: |
set -o pipefail
echo "Creating test data in migration source environment..."

# Setup institutions first (required for setup_test_data.py)
Expand All @@ -698,7 +730,7 @@ jobs:
docker cp ${{ github.workspace }}/e2e-tests/.github/scripts/setup_test_data.py "$(docker-compose ps -q web)":/tmp/setup_test_data.py

# Create test data that will be migrated
docker-compose exec -T -e WIKI_ENABLED="${WIKI_ENABLED}" web bash -c "python3 manage.py shell < /tmp/setup_test_data.py"
docker-compose exec -T -e WIKI_ENABLED="${WIKI_ENABLED}" -e MAPCORE_GROUP_ENABLED="${MAPCORE_GROUP_ENABLED}" web bash -c "python3 manage.py shell < /tmp/setup_test_data.py"

echo "Migration source test data created"

Expand Down Expand Up @@ -1266,14 +1298,15 @@ jobs:
- name: Create test users and projects
working-directory: RDM-osf.io
run: |
set -o pipefail
# Setup institutions first
docker-compose run --rm web python3 -m scripts.populate_institutions -e test -a

# Copy the setup script to the container
docker cp ${{ github.workspace }}/e2e-tests/.github/scripts/setup_test_data.py "$(docker-compose ps -q web)":/tmp/setup_test_data.py

# Execute the script and capture project IDs
docker-compose exec -T -e WIKI_ENABLED="${WIKI_ENABLED}" web bash -c "python3 manage.py shell < /tmp/setup_test_data.py" | tee /tmp/setup_output.txt
docker-compose exec -T -e WIKI_ENABLED="${WIKI_ENABLED}" -e MAPCORE_GROUP_ENABLED="${MAPCORE_GROUP_ENABLED}" web bash -c "python3 manage.py shell < /tmp/setup_test_data.py" | tee /tmp/setup_output.txt

# Extract project IDs and names from output
PROJECT_ID_1=$(grep "PROJECT_ID_testuser1@example.com:" /tmp/setup_output.txt | cut -d' ' -f2)
Expand Down Expand Up @@ -1351,6 +1384,24 @@ jobs:
idp_username_project_limit_2: 'testuser5@example.com'
idp_password_project_limit_2: 'testpass987'

# Dedicated user for groups tests
idp_username_3: 'testuser6@example.com'
idp_password_3: 'testpass666'
idp_username_4: 'testuser4@example.com'
idp_password_4: 'testpass654'
idp_username_5: 'testuser5@example.com'
idp_password_5: 'testpass987'
display_username_institutional_admin: 'Staff'
display_username_1: 'User 1'
display_username_2: 'User 2'
display_username_3: 'User 6'
group_a: 'GroupA'
group_b: 'GroupB'
group_c: 'GroupC'
group_d: 'GroupD'
group_search: 'Group'
group_note_text: '※本機能はムーンショット目標2'

# Test project URLs (using created project IDs and names)
rdm_project_url_1: 'http://192.168.168.167:5000/${{ env.PROJECT_ID_1 }}/'
rdm_project_name_1: '${{ env.PROJECT_NAME_1 }}'
Expand All @@ -1371,6 +1422,7 @@ jobs:
enable_1gb_file_upload: false
skip_autofill: ${{ matrix.test-group.skip_autofill == true }}
storages_oauth: []
mapcore_group_enabled: ${{ matrix.test-group.mapcore_group_enabled == true }}
EOF

args=(ci.config.yaml base_ci.config.yaml)
Expand Down
59 changes: 59 additions & 0 deletions run_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,25 @@ def __init__(self, config_path, show_disk_usage=False, failed_result_path=None):
self.idp_name_project_limit_2 = None
self.idp_username_project_limit_2 = None
self.idp_password_project_limit_2 = None

# Mapcore group test parameters
self.idp_username_3 = None
self.idp_password_3 = None
self.idp_username_4 = None
self.idp_password_4 = None
self.idp_username_5 = None
self.idp_password_5 = None
self.display_username_institutional_admin = None
self.display_username_1 = None
self.display_username_2 = None
self.display_username_3 = None
self.group_a = None
self.group_b = None
self.group_c = None
self.group_d = None
self.group_search = None
self.group_note_text = None
self.mapcore_group_enabled = False

# Exclude notebooks
self.exclude_notebooks = []
Expand Down Expand Up @@ -631,6 +650,45 @@ def run_wiki_tests(self):
)


def run_mapcore_group_tests(self):
"""Run Mapcore group tests."""
print('\n=== Mapcore group Tests ===')

if not self.mapcore_group_enabled:
print('Skipping Mapcore group tests (mapcore_group_enabled=false)')
return

self.result_notebooks.append(
self.run_notebook(
'取りまとめ-グループ.ipynb',
admin_rdm_url=self.admin_rdm_url,
idp_username_institutional_admin=self.idp_username_institutional_admin,
idp_password_institutional_admin=self.idp_password_institutional_admin,
idp_username_1=self.idp_username_1,
idp_password_1=self.idp_password_1,
idp_username_2=self.idp_username_2,
idp_password_2=self.idp_password_2,
idp_username_3=self.idp_username_3,
idp_password_3=self.idp_password_3,
idp_username_4=self.idp_username_4,
idp_password_4=self.idp_password_4,
idp_username_5=self.idp_username_5,
idp_password_5=self.idp_password_5,
display_username_institutional_admin=self.display_username_institutional_admin,
display_username_1=self.display_username_1,
display_username_2=self.display_username_2,
display_username_3=self.display_username_3,
group_a=self.group_a,
group_b=self.group_b,
group_c=self.group_c,
group_d=self.group_d,
group_search=self.group_search,
group_note_text=self.group_note_text,
skip_failed_test=self.skip_failed_test,
exclude_notebooks=self.exclude_notebooks,
)
)

def check_notebook_errors(self, notebook_path):
"""Check a notebook and all its sub-notebooks recursively for execution errors."""
all_errors = []
Expand Down Expand Up @@ -735,6 +793,7 @@ def run_all_tests(self):
self.run_weko_tests()
self.run_mibyo_db_tests()
self.run_workflow_tests()
self.run_mapcore_group_tests()
self.run_wiki_tests()

result_notebooks = [result_notebook for result_notebook in self.result_notebooks if result_notebook is not None]
Expand Down
Loading
Loading