mirror of https://github.com/zulip/zulip.git
test_slack_importer: Add end to end test.
TODO: Merge with previous commits.
This commit is contained in:
parent
1253686287
commit
7ec9a8e851
|
@ -889,6 +889,7 @@ Output:
|
||||||
realm_type: int = Realm.ORG_TYPES["business"]["id"],
|
realm_type: int = Realm.ORG_TYPES["business"]["id"],
|
||||||
realm_default_language: str = "en",
|
realm_default_language: str = "en",
|
||||||
realm_in_root_domain: str | None = None,
|
realm_in_root_domain: str | None = None,
|
||||||
|
import_from: str = "none",
|
||||||
) -> "TestHttpResponse":
|
) -> "TestHttpResponse":
|
||||||
payload = {
|
payload = {
|
||||||
"email": email,
|
"email": email,
|
||||||
|
@ -896,7 +897,7 @@ Output:
|
||||||
"realm_type": realm_type,
|
"realm_type": realm_type,
|
||||||
"realm_default_language": realm_default_language,
|
"realm_default_language": realm_default_language,
|
||||||
"realm_subdomain": realm_subdomain,
|
"realm_subdomain": realm_subdomain,
|
||||||
"import_from": "none",
|
"import_from": import_from,
|
||||||
}
|
}
|
||||||
if realm_in_root_domain is not None:
|
if realm_in_root_domain is not None:
|
||||||
payload["realm_in_root_domain"] = realm_in_root_domain
|
payload["realm_in_root_domain"] = realm_in_root_domain
|
||||||
|
|
|
@ -47,9 +47,16 @@ from zerver.data_import.slack import (
|
||||||
)
|
)
|
||||||
from zerver.lib.import_realm import do_import_realm
|
from zerver.lib.import_realm import do_import_realm
|
||||||
from zerver.lib.test_classes import ZulipTestCase
|
from zerver.lib.test_classes import ZulipTestCase
|
||||||
from zerver.lib.test_helpers import read_test_image_file
|
from zerver.lib.test_helpers import find_key_by_email, read_test_image_file
|
||||||
from zerver.lib.topic import EXPORT_TOPIC_NAME
|
from zerver.lib.topic import EXPORT_TOPIC_NAME
|
||||||
from zerver.models import Message, Realm, RealmAuditLog, Recipient, UserProfile
|
from zerver.models import (
|
||||||
|
Message,
|
||||||
|
PreregistrationRealm,
|
||||||
|
Realm,
|
||||||
|
RealmAuditLog,
|
||||||
|
Recipient,
|
||||||
|
UserProfile,
|
||||||
|
)
|
||||||
from zerver.models.realm_audit_logs import AuditLogEventType
|
from zerver.models.realm_audit_logs import AuditLogEventType
|
||||||
from zerver.models.realms import get_realm
|
from zerver.models.realms import get_realm
|
||||||
|
|
||||||
|
@ -1543,3 +1550,97 @@ class SlackImporter(ZulipTestCase):
|
||||||
# We need to mock EXTERNAL_HOST to be a valid domain because Slack's importer
|
# We need to mock EXTERNAL_HOST to be a valid domain because Slack's importer
|
||||||
# uses it to generate email addresses for users without an email specified.
|
# uses it to generate email addresses for users without an email specified.
|
||||||
do_convert_zipfile(test_slack_zip_file, output_dir, token)
|
do_convert_zipfile(test_slack_zip_file, output_dir, token)
|
||||||
|
|
||||||
|
@mock.patch("zerver.views.registration.queue_json_publish")
|
||||||
|
@responses.activate
|
||||||
|
def test_end_to_end_slack_import(
|
||||||
|
self,
|
||||||
|
mock_queue: mock.Mock,
|
||||||
|
) -> None:
|
||||||
|
# Choose import from slack
|
||||||
|
email = "ete-slack-import@zulip.com"
|
||||||
|
result = self.submit_realm_creation_form(
|
||||||
|
email,
|
||||||
|
realm_subdomain="ete-slack-import",
|
||||||
|
realm_name="Slack import end to end",
|
||||||
|
import_from="slack",
|
||||||
|
)
|
||||||
|
|
||||||
|
# Confirm email
|
||||||
|
self.assertEqual(result.status_code, 302)
|
||||||
|
self.assertTrue(
|
||||||
|
result["Location"].endswith(
|
||||||
|
"/accounts/new/send_confirm/?email=ete-slack-import%40zulip.com&realm_name=Slack+import+end+to+end&realm_type=10&realm_default_language=en&realm_subdomain=ete-slack-import"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
result = self.client_get(result["Location"])
|
||||||
|
self.assert_in_response("check your email", result)
|
||||||
|
prereg_realm = PreregistrationRealm.objects.get(email=email)
|
||||||
|
self.assertEqual(prereg_realm.name, "Slack import end to end")
|
||||||
|
self.assertEqual(prereg_realm.data_import_metadata["import_from"], "slack")
|
||||||
|
|
||||||
|
# Redirect to slack data import form
|
||||||
|
confirmation_url = self.get_confirmation_url_from_outbox(email)
|
||||||
|
result = self.client_get(confirmation_url)
|
||||||
|
self.assert_in_success_response(["new/import/slack"], result)
|
||||||
|
|
||||||
|
# Mock slack API response and mark token as valid
|
||||||
|
access_token = "xoxb-valid-token"
|
||||||
|
slack_team_info_url = "https://slack.com/api/team.info"
|
||||||
|
responses.add_callback(
|
||||||
|
responses.GET,
|
||||||
|
slack_team_info_url,
|
||||||
|
callback=lambda _: (
|
||||||
|
200,
|
||||||
|
{"x-oauth-scopes": "emoji:read,users:read,users:read.email,team:read"},
|
||||||
|
orjson.dumps({"ok": True}),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
confirmation_key = find_key_by_email(email)
|
||||||
|
result = self.client_post(
|
||||||
|
"/new/import/slack/",
|
||||||
|
{
|
||||||
|
"key": confirmation_key,
|
||||||
|
"slack_access_token": access_token,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.assertEqual(result.status_code, 200)
|
||||||
|
prereg_realm.refresh_from_db()
|
||||||
|
self.assertEqual(prereg_realm.data_import_metadata["import_from"], "slack")
|
||||||
|
self.assertEqual(prereg_realm.data_import_metadata["slack_access_token"], access_token)
|
||||||
|
|
||||||
|
# Assume user uploaded a file.
|
||||||
|
prereg_realm.data_import_metadata["uploaded_import_file_name"] = "test_slack_importer.zip"
|
||||||
|
prereg_realm.save()
|
||||||
|
|
||||||
|
# Check that deferred_work for import is queued.
|
||||||
|
result = self.client_post(
|
||||||
|
"/new/import/slack/",
|
||||||
|
{
|
||||||
|
"key": confirmation_key,
|
||||||
|
"start_slack_import": "true",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.assert_in_success_response(["Import progress"], result)
|
||||||
|
prereg_realm.refresh_from_db()
|
||||||
|
self.assertTrue(prereg_realm.data_import_metadata["is_import_work_queued"])
|
||||||
|
mock_queue.assert_called_once_with(
|
||||||
|
"deferred_work",
|
||||||
|
{
|
||||||
|
"type": "import_slack_data",
|
||||||
|
"preregistration_realm_id": prereg_realm.id,
|
||||||
|
"filename": f"import/{prereg_realm.id}/slack.zip",
|
||||||
|
"slack_access_token": access_token,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
# Check cancel import cancels the import
|
||||||
|
result = self.client_post(
|
||||||
|
"/new/import/slack/",
|
||||||
|
{
|
||||||
|
"key": confirmation_key,
|
||||||
|
"cancel_import": "true",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
prereg_realm.refresh_from_db()
|
||||||
|
self.assertEqual(prereg_realm.data_import_metadata.get("import_from"), None)
|
||||||
|
|
Loading…
Reference in New Issue