All End-to-End tests and where to find them
============================================

Test ids: TyTE2E... = end-to-end test, TyTIT... = integration test.

RENAME this file to tests-map.txt

E2e tests take long to run. Therefore, to save time, a single e2e test sometimes tests
many things. But then it's hard to give it a name that describes everything it does. Instead
here you'll find a map of all things that are e2e tested, and in which files. A single file
might be listed at many places in the tree, if it tests different things.

Webdriver.io writes: (https://webdriver.io/docs/organizingsuites.html)

> In general, try to test a only a single feature per spec file. Try to not have too many or too few tests in one file. (However, there is no golden rule here.)

_abc123 (and '(ABC123)') means see-elsewhere-in-this-file = search for _abc123 in this file.
[ABC123] = search all files everywhere

Run all tests in different resolutions? Desktop, laptop, tablet, mobile.

I'm planning to implement the text on lines with "NEXT" soon (probably because
someone reproted a bug & it got fixed, better avoid regressions.)


search,
full text search:
            - search-public-basic.2br  TyTSEARCHPUBBASIC
            - search-tag-vals-priv-cats.2br.f  TyTSEARCHTAGSPRIVCAT
            ... plus lots of places ...
  staff only page:
    found by admins:
            navigation-as-admin.test.ts  TyT7WAAR2J4 TyT85WABR0
    not found by non-staff:
            - api-search-full-text.1br.f  TyT70ADNEFTD36.TyT60KTSJ35J
  custom groups private pages not found:
            - group-permissions-similar-topics.2browsers.test.ts  TyT05BMRSH2J
  private chat:
            - search-private-chat.2br  TyTSEARCHPRIVCHAT
  direct message,
  private chat,
  restricted category:
            - api-search-full-text.1br.f  TyT70ADNEFTD36.TyT60KTSJ35J
            - search-tag-vals-priv-cats.2br.f  TyTSEARCHTAGSPRIVCAT
  sub cat in access restricted base category:
            - category-perms.2br.d  TyTE2ECATPREMS01.TyTSEARCHPRIVCAT
  deleted cat:
            - categories-delete.2br   TyTE2ECATDEL01
  from external backend server:
            - api-search-ext-site-and-server.2br.cors  TyTEAPIEXTSRV
  advanced search queries:
    only with specific tags,
    only in specific category:
            - search-tag-vals-priv-cats.2br.f  TyTSEARCHTAGSPRIVCAT
  advanced search page:
            - TESTS_MISSING  adv search UI incomplete, can only select cats
  load more, result offset:
            - TESTS_MISSING  TyTSERPLOADMORE
  username fuzzy search:
            - TESTS_MISSING  and not implemented
  cats & tags shown properly on SERP:
            - TESTS_MISSING
    private tags not shown:  [priv_tags]
            - TESTS_MISSING  and private tags not implemented
    private users not shown:  [private_pats]  # assignees, authors
            - TESTS_MISSING  and private users not implemented
            

indexing,
job queue, job_queue_t:
            - reindex-sites.2br.f  TyTREINDEX3
  posts w same timestamp:
            - reindex-sites.2br.f  TyTREINDEX3.[ix_posts_w_same_ts]

create site & forum -
  via api: [.create_site_via_api]
  create forum:  
            - create-site-*  — many tests
            - create-site-all-logins
    private forum:  
            - create-private-site-password.2br.f  TyTCRSITPRIVPW
            - create-private-site-gmail-invite-only.2br.f  TyTCRSITPRIVGMAIL
  not too many per ip / email:
  not too many in total:
  reserved subdomain:

move site to new hostname:
  move to new,
  move back:
          - admin-move-hostname.2browsers.test.ts  TyT6FKAR20P5
  cannot overwrite other site:
          - admin-move-hostname.2browsers.test.ts  TyT85RRPJ28 MISSING

create account -
  password:  create-site-all-logins
  google:  create-site-all-logins
  facebook:  create-site-all-logins
  github:
  twitter:
  email aready in use:
  username aready in use:
  reserved username:

login,
authn:
  single sign-on: (3093533)
  guest:  # copy-edit unsubscribe.2browsers.test.ts + use signUpLogInAs_Real_Guest
          - embedded-comments-guest-login-email-notf-unsbscribe.test.ts  TyT5WBK0267
  cookieless:
          - embedded-comments-no-cookies-guest.test.ts        TyT295KBF6301
          - embedded-comments-no-cookies-verif-email.test.ts  TyT795KB69285
          - embedded-comments-no-cookies-verif-gmail.test.ts  TyT795KB61368
          - embedded-comments-no-cookies-unverif-gmail.test.ts  TyT6224BKA253
  password:
          - password-login-reset.2br.f  TyT5KAES20W
    via email verif email:
          - unsubscribe.2browsers.test.ts  [TyT2ABK5I0]
    owner resets, before first login:
            - dir.create-site-via-api.2br  TyTE2ECREASITAPI  incl type wrong pwd
            - embcom.create-site-via-api.2br  TyTE2ECREAEMBSITAPI
    resets, but types wrong email:
            - dir.create-site-via-api.2br  TyTE2ECREASITAPI.TyTERSTWRONGEML
    email chars, '+' is ok, test for both guests and real users:
            - TESTS_MISSING
    suspended user resets password:
            - TESTS_MISSING  [email_lgi_susp]
  forgot password -
    reset it:
          - password-login-reset.2br.f  TyT5KAES20W
      logged out everywhere on reset:
          - password-login-reset.2br.f  TyT5KAES20W.TyT_PWDRST_LGOUT
      reset link invalid after user deleted:
          - user-self-delete-upd-groups.2br.f.e2e.ts  TyT6DMSNW3560.TyT_DELACT_RSTPW
    forgot email address:
  mixed case OpenAuth email and username:
          - create-site-github-oauth-uppercase-email  TyT5AKR2Z95
  to long username generated from email gets truncated to 20 chars = MaxUsernameLength
          - create-site-github-oauth-uppercase-email  TyT5AKR2Z95  [6AKBR20Q]
  providers:
    google:
            - create-site-gmail-and-email-notf.1br.d.extidp  TyT7KKTEHS24
            - create-site-all-logins.test.ts  TyT5KBWAZ2
            - gmail-fb-join-login.extidp.1br.test.ts  TyTE2EGMFBJOINLGI
    facebook:
            - create-site-facebook.1br.d.extidp  TyT8KA9AW3
            - create-site-all-logins.test.ts  TyT5KBWAZ2
            - gmail-fb-join-login.extidp.1br.test.ts  TyTE2EGMFBJOINLGI
    github:
            - create-site-github-uppercase-email.1br.d.extidp  TyT5AKR2Z95
    linkedin:
            - create-site-linkedin.1br.d.extidp  TyT402KDTT5Z
    twitter:
  openauth security:
          - generate fake login request: TESTS_MISSING
  password user logs in via -
    gmail:
    facebook:
    github:
    twitter:
  via invite email: (7JK2)
  login-required site, with password:
            - settings-toggle-login-required.3br.d  TyT4GKBW20
  login-required site, with openauth:
            - login-required-oauth-signup-login.test.ts  TyT406MRTJW2
  login directly to admin area
    with oidc,
    with server default oauth2:
          - see ^oidc
  continue after login:
            - sso-test  TyT4ABKRW0268.TyTECONTAFTAUN
            - TESTS_MISSING  would be good with more tests: Reply, Like, Flag,
                but first, on click, needs to log in.

  [.lazy_authn],
  lazy authn,
  authn lazily,
    dir:
      after composing
        new topic:
        reply:
    emb:
      composing comment before logged in:
            - embcom.reply-vote-report-bef-login.2br  TyTEEMBCDOBEFAUN.TyTRELZYAUN
            - embcom.drafts-previews-not-logged-in.2br  TyT2ZBKPW048.TyTRELZYAUN
      report & vote before logged in:
            - embcom.reply-vote-report-bef-login.2br  TyTEEMBCDOBEFAUN

oauth2,
ext idps:
  keycloak:
    sign up, log in with Keycloak,
      get verification email iff !email_verified:
          - TESTS_MISSING
  ScribeJava:
    login with 2 IDPs in parallel, say, Gmail, GitHub:  TESTS_MISSING
  link identity to user:
    server global idp, e.g. Gmail:   TESTS_MISSING
    site custom idp, e.g. Keycloak:
  link identity to user with unverified email addr:
          - TESTS_MISSING  TyTE2ELN2UNVER
  link OAuth2 identity to other OAuth2 identity:  TESTS_MISSING
    different email casing:  TESTS_MISSING
  link password acct to OAuth2 identity:  TESTS_MISSING
  azure:
    sign up, log in with email not/verified domain,
      get verification email iff needed:
          - TESTS_MISSING
    link to existing account: (if migrating to Azure SSO)
          - TESTS_MISSING

oidc,
external idps,
custom idps:
  enable oidc sso:
            - oidc-azure-login-required.2br.extidp.test.ts  TyTE2E60RTE24.TyTOIDCSSO
  link to existing Ty accuont:
    ext email already verified:
            - oidc-azure-login-required.2br.extidp.test.ts  TyTE2E60RTE24.TyTOIDCLNVERACT
    ext email not yet verified:

  Ty account approval required:
            - TESTS_MISSING  Skip for now, "always" handled at IDP instead.

  linking ext IDP account question text placeholders filled in correctly:
            - oidc-azure-login-required.2br.extidp  TyTE2E60RTE24.TyTLNIDP2TY043

  # Lots of combos! 1*4*(1 + 1 + 3 + 3) = 32. Inherent complexity.
  linking external IDP account:
  All this tested here and here:
            - oidc-azure-pub-site.2br.extidp  TyTE2EOIDCAZ02
            - oidc-azure-login-required.2br.extidp  TyTE2E60RTE24
    public site and IDP SSO,
    public site and no SSO,
    login required and IDP SSO,
    login required but no SSO:
      login to admin area:
        IDP email verified:
          Ty acct, email verified:
        IDP email unverified:
          Ty acct, email verified:
      login to discussion:
        IDP email verified:
          no Ty acct
          Ty acct, email verified:
          Ty acct, email not verified:
            - TESTS_MISSING  TyTE2E60RTE24.TyTE2EIDPTYEMLUNVER
        IDP email unverified:
          no Ty acct
          Ty acct, email verified:
          Ty acct, email not verified:
            - TESTS_MISSING  TyTE2E60RTE24.TyTE2EIDPTYEMLUNVER
  require-verified-emails turned on later, when already unverified users:
            - TESTS_MISSING  [old_users_verif_email]


sso,
single-sign-on:  (3093533)
          - sso-test  TyT4ABKRW0268
          - sso-login-member  TyT5HNATS20P
          - sso-login-new-members.2browsers  TyT306FKRDJ5
          - sso-login-required  TyT7KSD20RG42
          - sso-approval-required  TyT502RKDJH3
          - sso-login-and-approval-required  TyT503KRTTR204BR
          - sso-admin-extra-login.test.ts / admin one-time login  TyT03WKDTRP50
          - sso-all-ways-to-login.2browsers.test.ts  TyT7FKRTTSR024
          - sso-access-denied-login.2browsers.test.ts  TyT4AKT02DKJ41
          - api-w-sso-upsert-pages.2browsers.test.ts  TyT60KRJXT4X3
          - [_embcom_sso]
  one-time login secret abuse:
          - sso-one-time-key-errors.2browsers.test.ts  TyT5025BDUJQP4R
  login required ty-only logout url:
          - sso-login-required-w-logout-url.2browsers  TyTE2ESSOLGOURL.TyTE2ELGOURL
  logout redir url:
          - sso.logout-url.2br  TyTE2ESSOLGOURL2.TyTSSOLGO002
          - embcom.sso.token-direct-w-logout-url.2br.ec  TyTE2EEMBSSO1.TyTSSOLGO002
  unusual names:
          - sso-login-new-members.2browsers  TyT306FKRDJ5.TyT603KTMM653
  email conflict:
          - sso-login-new-members.2browsers  TyT306FKRDJ5.TyT0WMRSKJ4
  dupl username made unique:
          - sso-login-new-members.2browsers  TyT306FKRDJ5.TyT05MSH47R
  update sso user's email, username etc:
          - api-update-user-and-sso-user.2br   TyTE2E05MRR9

sso, embedded comments, [_embcom_sso],
embedded comments sso,
blog comments sso:
            - embcom.sso.token-direct-w-logout-url.2br.ec  TyTE2EEMBSSO1
                - combining with  direct SSO:  TyT306MRG2
            - embcom.sso.token-in-cookie.2br.ec  TyTE2EEMBSSO2
            - embcom.manyframes.js-api.sso.2br.ec  TyTEMANYEMBDISAPISSO
  redirect whole embedding page to sso server:
            - embcom.sso.redir-page.2br.ec.e2e.ts  TyTE2EEMBSSO3.TyTEMBSSOREDIR

impersonate:
          - impersonate-post-as-other.2browsers  TyT502KNG24
          - impersonate-restricted-areas.test.ts  TyT6502PKSNR57

alias,
anonymous comments,
anons:
  partly impl:
            - tests/app/debiki/dao/AnonymAppSpec.scala
  _anon_e2e_to_code_review:
            - alias-anons-basic-temp.2br.f
            - alias-anons-basic-perm.2br.f
            - alias-anons-approve-review.2br.f
            - alias-anons-edit-alter.2br.f
  TESTS_MISSING, not impl:
            - alias-anons-true-mixed.2br.f
            - alias-anons-see-own.2br.f
  settings:
    enabling Anon Sens Disc disables presence:
            - alias-anons-true-mixed.2br.f  TyTALIANONTRUEMX.TyTANOSENSDISLN
  TESTS_MISSING:
    but now most of this implmented, see _anon_e2e_to_code_review above.
            - See  ../wip/aliases/auto-test-thoughts.txt
            - Anon mode, send priv msg?
            - Callers of  checkAliasOrThrowForbidden() & getAliasOrTruePat() [misc_alias_tests]
            - Cannot move anon post to other page.  TyTMOVANONCOMT
            - Notfs from anons (comments, votes, more?), don't include real user name  TyTNOTFFROMANON
            - UNTESTED; TESTS_MISSING // exp imp anons?
                  True ids are incl in json dumps? [export_privid]
            - Can't vote many times using different personas TyTALIVOTES
            - Reuse anons: At most one per page & person [one_anon_per_page].
                Verify cannot create many, by opening many browser tabs
                & posting one anon comment in each?

            - Anons for drafts, UNTSETED.
            - Load anon drafts, restore as anon. TyTANONDFLOAD
            - Edit & update the draft.  TyTEDUPDDFT04
            - Save anon draft, reuse an anon.  TyTDFTREUSEANON.
            - Save draft using the wrong alias —  should work, but needs to choose an
                    ok alias before actually posting (not just saving a draft).
                - When editing own post  TyTDRAFTALI
                - When editing sbd else's post
            - Edit comment as anon: Anon name in new edit revision, & email notfs. TyTANONEDIT

            - Post pages as anon
            - Post page as anon,
                    edit as self
                    alter as self
            - Post page as self
                    edit as anon
                    alter as anon
            - Post comment as anon
                    edit as self
                    alter as self
            - Post comment as self
                    edit as anon
                    alter as anon
            - Change own anon post to wiki & back
                 others' not/anon post to wiki & back as anon / not-anon oneself
            - Edit other's page text
            - Alter other's page  TyTALIALTERPG,  PageTitleSettingsController
            - Alter =   
                - Accept/unaccept answer
                - Close/reopen page
                - Delete/undelete own anon page
                - Delete/undelete own anon comment
                - Rename page
                - Change page type, doing status, answer
                - Move to other category, where:
                    - Alias allowed
                    - Alias not allowed
            - Start composing new topic, change to/from anon cat, see Post As ...
              appear/disappear, and "You cannot be anonymous ..." etc info diags pop up.
            - Reply to oneself on anon-rec page where's been anon elsewhere —> self, etc
            - Reply anonly, go to sbd's profile page, compose priv msg: Should become oneself
            - Anon-by-def page, start composig a reply (as anon), cancel, go to sbd's profile page,
                  compose priv msg: Should now post as oneself (not anon any more).
            - Edit history: Proper names (e.g. Anon, not one's true name) shown?
                - Comments
                - Page title
                - Orig post
            - Different anon statuses: Comts start anon / NeverAlways.AlwaysButCanContinue / etc
            - Page with both Perm Anon and Temp Anon comments: [dif_anon_status]
                - Like-vote OP, gets to choose: Perm Anon or Temp Anon, or Self
                - Temp Anon in temp anon sub thread
                - Perm Anon in perm anon sub thread
            - Can't move anon comments to other pages
            - Persona indicator updated properly when: (lots of combinations!)
                starting on anon never / allowed / recommened / always page,
                  - navigating to anon recommended cat, then to not-anon
                  - navigating to not-anon cat, then recommended cat, then not-anon
                  back to anon / not-anon page
            - Anon posts enabled
                - tests/app/debiki/dao/AnonymAppSpec.scala  TyTANON0ENBL TyEM0MKANON_
                - in one cat, not in another
                - in sub cat
                - on specific page
            - ... and more
            - Audit log user ids

different users -
  login, logout, switch user:  almost all tests

sessions:
  list one's active sessions,
  terminate one's other sessions:
            - d.sessions-logout-elsewhere.4br.ts  TyTESESLGOSELF
  staff can terminate others' sessions:
            - d.sessions-staff-logout-others.4br  TyTESESLGOOTR
  mods cannot terminate admins sessions:
            - TESTS_MISSING  TyTESESTERMADM
            - d.sessions-staff-logout-others.4br  TyTESESLGOOTR  TyEADMINSESS_
  terminate embedded comments session cached in localStorage:
            - TESTS_MISSING  TyTESESTERMEMBD
  require session part 4,
  a stolen embdding storage sid part 1+2 is pretty useless:
            - embcom.sessions-emb-sess-cannot-moderate.3br  TyTEECSESS0MOD
  require part 4 HttpOnly for admin stuff:
            - TESTS_MISSING
  require part 4 HttpOnly for non-embedded comments stuff:
            - TESTS_MISSING, and partly UNIMPL
  part 123 gone, client side offline logout:
            - sso-test  TyT4ABKRW0268.TyTESESS123GONE
            - TESTS_MISSING could add tests for this specifically
  part 123 bad,
  part 4 or 5 bad or gone:
            - TESTS_MISSING  TyTSESSHALFBAD
  sorted by recently active first, on one's user page:
            - TESTS_MISSING
  session terminated if user suspended or deleted:  [.del_susp_usr]
            - TESTS_MISSING


navigation:
  from anywhere, to anywhere:
          - navigation-as-stranger.test.ts  TyT5WKAB024
          - navigation-as-member.test.ts  TyT2ABKR593
          - navigation-as-admin.test.ts  TyT7WAAR2J4
          - embedded-comments-navigation-as-guest.test.ts  TyT2P067WKT2
  to topic with unapproved posts:
          - modn-from-disc-page-appr-befr.2browsers.test.ts  TyTE2E603RTJ.TyTE2E603SKD
  from user profile topic list to page:
            - tags-basic.2br  TyTE2ETAGSBSC.TyTNAVUSR2PG
  from user profile posts list to page:
            - badges-basic.2br  TyTE2EBADGESBSC.TyTNAVUSR2PO
  from page to one's active sessions list:
            - d.sessions-logout-elsewhere.4br  TyTESESLGOSELF

about user dialog,
about pat box:
  see groups:
            - may-see-email-adrs.2br.d  TyTSEEEMLADRS01.TyTSEEPATSGROUPS
  see email addr:
            - may-see-email-adrs.2br.d  TyTSEEEMLADRS01.TyTABOUTBOXEML
            - may-see-email-adrs.2br.d  TyTSEEEMLADRS01.TyTHIDELOCALEMLPART

profile page, user:
  upload photo:  (8PK2)
  edit full name:
  change username:
  create password:
  change password:
    type old password:
    via email:
          - user-profile-change-password.test.ts  TyT6HJ2RD1
  create password:
  list & click notfs:
  suspend:
  posts & topics:
    won't list hidden or unapproved posts:
    won't list posts in deleted categories:
    won't list posts from deleted pages:
    won't list posts from pages one may not see:
  privacy: [_priv]

  list login methods:
          - create-site-github-oauth-uppercase-email.test.ts  TyT4AR8GFAH

  configure who can see email addrs:
            - may-see-email-adrs.2br.d  TyTSEEEMLADRS01.TyTCANCONFSEEML
  see email addresses:
    can/not see email addr
      in about box,
      on profile page,
            - may-see-email-adrs.2br.d  TyTSEEEMLADRS01
    can navigate to email addrs tab, iff can see pat's emails:
            - may-see-email-adrs.2br.d  TyTSEEEMLADRS01.TyT0ACSPREFS01

  add email address, send verification email:
          - user-profile-change-email.test.ts  TyT305MHPJ25
  add gmail addr:

  rename guest:
          - TESTS_MISSING
  see (parts of) task list:
            - assign-to-basic.2br.d  TyTASSIGN01.TyTASGNPERMS01
  delete pat:
    delete guest:
    delete user:
    delete group:
    self delete, gdpr:
          - user-self-delete-upd-groups.2br.f.e2e.ts  TyT6DMSNW3560


profile page, a group:
  edit username:
          - group-profile-change-things.2browsers.test.ts  TyT5MS5TWV0
  notf prefs for groups:
          - notf-prefs-custom-groups.2browsers.test.ts  TyT60MRAT24
          - notf-prefs-pages-replied-to.2br.test.ts  TyTE2E402SM53

  add/remove group members:
          - notf-prefs-custom-groups.2browsers.test.ts  TyT60MRAT24
          - group-mentions-custom-group.2browsers.test.ts  TyT5BMRP2058
          - user-self-delete-upd-groups.2br.f.e2e.ts  TyT6DMSNW3560
          - permissions-edit-wiki-posts.2browsers.test.ts  TyT603RKDEJ46
  see permission settings:
            - may-see-email-adrs.2br.d  TyTSEEEMLADRS01.TyT0ACCESSPERMS04
    settings disabled, unless is admin:
            - may-see-email-adrs.2br.d  TyTSEEEMLADRS01.TyTCANCONFSEEML

groups:
  list members:
          - invite-to-groups.2browsers.test.ts  TyT01AKTHSN63
  list/create/delete groups,
  conf group cat notf prefs,
  inherit group's notf prefs,
  override group's notf prefs:
          - notf-prefs-custom-groups.2browsers.test.ts  TyT60MRAT24

  add/remove members:
          - notf-prefs-custom-groups.2browsers.test.ts  TyT60MRAT24
          - user-self-delete-upd-groups.2br.f.e2e.ts  TyT6DMSNW3560
          - invite-to-groups.2browsers.test.ts  TyT7WKTJ40ZT22
    when many:
          - many-users-mention-list-join-group.2browsers.test.ts  TyT602857SKR

  update when user deleted:
          - user-self-delete-upd-groups.2br.f.e2e.ts  TyT6DMSNW3560
  @mention:
          - group-mentions-built-in-groups.2browsers.test.ts  TyT4AWJL208R
          - group-mentions-custom-group.2browsers.test.ts  TyT5BMRP2058
  permissions, custom groups:
          - group-permissions-similar-topics.2browsers.test.ts  TyT05BMRSH2J
          - permissions-edit-wiki-posts.2browsers.test.ts  TyT603RKDEJ46
  privacy: [_priv]


privacy:  [_priv] [.noise_and_privacy]
            - privacy-list-activity.2br.f  TyTPRIV_LSACT
            - block-mentions.2br.d  TyTMAYMENTION
            - block-dir-msgs.2br.d  TyTBLOCKDIRMSGS
  inherited from groups:
            - privacy-may-see.3br.f.e2e.ts  TyTPRIV_MAYSEE
  see activity but not user profile?:  [see_activity_0_profile]
      not implemented, and:
            - TESTS_MISSING  TyTPRIV_ACT0PROF
  see email:
  see username:
  see if I'm online:

security:
  access denied,
  not found page, 404:
            - group-permissions-similar-topics.2browsers.test.ts  TyT05BMRSH2J TyT406AK24
            - promote-demote-by-staff-join-leave-chats.2br.test.ts  TyTE2E5H3GFRVK
  api get topics in restr cat:
            - embcom.comment-counts.2br.ec.cors  TyTE2ECOMCOUNTS
  api list restriceted category:
            - api-list-query-for-topics-popular-first.test.ts  TyT603AKSL25.TyT502RKDJ46
  api search restricted categories and private topics:
            - api-search-full-text.1br.f  TyT70ADNEFTD36.TyT60KTSJ35J
  ui search restricted chats & cats:
            - search-private-chat.2br  TyTSEARCHPRIVCHAT
            - search-tag-vals-priv-cats.2br.f  TyTSEARCHTAGSPRIVCAT
  add group to category security settings:
            - api-list-query-for-topics.test.ts  TyT69WKTEJG4
            - api-search-full-text.1br.f  TyT70ADNEFTD36.TyT69WKTEJG4
  join page one may not see:
          - promote-demote-by-staff-join-leave-chats.2br.test.ts  TyTE2E5H3GFRVK.TyT502RKTJF4
  add to watchbar a page one may not see:
          -  TyT602KRGJG SEC_TESTS_MISSING
  edit wiki topics permission:
          - permissions-edit-wiki-posts.2browsers.test.ts  TyT603RKDEJ46.TyTWIKIPRMS
  misc security: SEC_TEST_MISSING
  xss:
          - coed tag: [e2e_xss] — but at other places too, didn't tag at the time
            search for "<script>" or "javascript:" to find?
  cors:
            - api-search-ext-site-and-server.2br.cors  TyTEAPIEXTSRV
            - embcom.comment-counts.2br.ec.cors  TyTE2ECOMCOUNTS
            - embcom.manyframes.comment-counts.2br.cors  TyTE2EMNYFRCOMCNTS
  categories: see (1QRY7)
  see other's tasks:
            - assign-to-basic.2br.d  TyTASSIGN01.TyTASGNPERMS01
  task list won't show tasks (pages) one can't see,
  can't assign a task to sbd who can't see it:
            - assign-can-see.2br.d  TyTASSIGNCANSEE
  not notified about pages one can't see:
            - notf-prefs-private-groups.2browsers.test.ts  TyT406WMDKG26
  one's own page that one can no longer see:
    is ignored when deriving one's user stats?:
            - SEC_TEST_MISSING
    is excluded from one's activity list also for oneself:
            - SEC_TEST_MISSING  TyT0SEEOWNPAGE
  admins can't use sysbot secrets for the wrong things:
            - site-api-secrets-not-global.2br.f  TyTSITESECR0GLOB

deleted users:  [.del_susp_usr]
            - SEC_TEST_MISSING
suspended users:
  gets no email notfs,
  websocket gets disconnected,
  cannot access login-required site:
          - login-required-join-global-chat.2br  TyTE2E603MAT53
  suspended user cannot access private chat:
          - SEC_TEST_MISSING

invites -
  before accepts:
    signs up:
    logs in:
  accepts, and then: (7JK2)
    clicks create password email link:
          - invites-by-adm-click-email-set-pwd-link.2browsers.test.ts  TyT45FKAZZ2
    tries to login, but no password:
          - invites-by-core-try-login-after.2browsers.test.ts  TyT2WKF5PF30
    tries to sign up:
          - invites-by-mod-try-signup-after.2browsers.test.ts  TyT4FGJA20M
  view sent:
    as moderator:
          - invites-by-mod-try-signup-after TyT4FGJA20M
    as admin:
          - invites-by-core-try-login-after.2browsers.test.ts  TyT2WKF5PF30
    as core member:
          - invites-by-core-try-login-after.2browsers.test.ts  TyT2WKF5PF30
  core members can send, new users cannot:
          - invites-by-core-try-login-after.2browsers.test.ts  TyT2WKF5PF30
  don't become staff:
          - invites-by-mod-try-signup-after.2browsers.test.ts  TyT4WK0AQ2
  don't result in forbidden usernames:
          - invites-werd-email-addrs.2browsers.test.ts  TyT7KBAJ2AD4
  invite many:
          - invites-many-retry.2browsers.test.ts  TyT5BKA2WA30
  resend invite:
          - invites-many-retry.2browsers.test.ts  TyT5BKA2WA30
  expires:
  invite to groups:
          - invite-to-groups.2browsers.test.ts  TyT7WKTJ40ZT22
  invite-only:
            - create-private-site-gmail-invite-only.2br.f  TyTCRSITPRIVGMAIL.TyTINVONLY


emails -
  send invite:
  accept invite:
  email notifications: (5ABKR024)
  unsubscribe:  (7ABKR023)
    via email link:
            - unsubscribe.2browsers.test.ts  TyT2ABKG4RUR
            - group-mentions.2browsers.test.ts   TyT7AKWB2LG
    via user profile page:
  add email address, send verification email:
            - user-profile-change-email.test.ts  TyT305MHPJ25
  activity summary emails:
            - summary-emails.2br.mtime  TyTE2E06AJG256
    new members' topics excluded until reviewed by staff:
            - TESTS_MISSING
  api,
  emails in:
            - site-api-secrets-not-global.2br.f  TyTSITESECR0GLOB.TyTEMLWEBHSECR

  require-verified-emails turned on later, when already unverified users:
            - TESTS_MISSING  [old_users_verif_email]

getting started guide -
  guide present:
  edit site title, description, company_:
  edit forum title:  (7UC2)
  edit forum intro text:
  edit welcome topic:
  edit about page:
  create category:
  create topic: (7UC2)
  send invite: (7JK2)

forum -
  edit title:  (7UC2)
  change intro text:  (5KC2)
  list categories, show all/waiting:
  latest topics -
    all categories:
    only one category:
    change category:
            - navigation-as-impl.ts  TyT4BKAFE5GA  MISSING
            - forum-sort-and-scroll.d.2br  TyT5ABK2WL4   MISSING
            - group-permissions-similar-topics.2browsers.test.ts  TyT05BMRSH2J
    show waiting:
    show deleted -
      not/staff: authz-view-as-stranger.test.ts
  do-it votes,
  sort by votes,
  sort order of topics: _topic_order
            - do-api-upvote-ideas-sort-by-votes.2br.d  TyTDOAPI_UPVOTE_IDEAS
  lock sort order:
            - do-api-upvote-ideas-sort-by-votes.2br.d  TyTDOAPI_UPVOTE_IDEAS.TyTLOCK_TPC_ORD
  popular topics -
    all categories:
    only one category:
    past day/week/month/quarter/year/all time:
    show waiting:
    show deleted:
    background thread deletes spam comment —> popularity recalculated:  (not yet impl)
  live updates:  (4FE2)
  load more topics, all topics listed -
    via js:
        - forum-sort-and-scroll.d.2br  TyT5ABK2WL4
    js disabled:
    'active' sort order:
        - forum-sort-and-scroll.d.2br  TyT5ABK2WL4
    'newest' and
    'active' sort orders:
        - forum-sort-and-scroll.d.2br  TyT5ABK2WL4
    'newest' and a category:
    click load-more twice:

[prom_pats_tests],
topic list,
forum topic list:
  orig poster, frequent posters, last poster, assigned avatar list:
            - topic-prominent-pats-basic.2br.d  TyTPROMPATS_BSC
            - topic-prominent-pats-reply-approve.2br.d  TyTPROMPATS_REAPR
            - SitePatcherAppSpec.scala  206K94QTD

forum intro text -  (5KC2)
  edit, remove, add back:
  hide, show:

forum page layout:
  import:
            - tags-basic.2br  TyTE2ETAGSBSC.TyTFRMLAYOUT

categories:
            - categories-basic.3br.d   TyTCATSBASIC
  create:
    custom name, default everything:
            - create-site-admin-guide.2browsers.test.ts  TyT62RJHLPK4
    custom name and ext id:
            - api-upsert-categories.2browsers.test.ts  TyT94DFKHQC24
    custom name, custom everything:
  edit about topic:
  edit name, slug, topic types, position:
          - api-upsert-categories.2browsers.test.ts  TyT703LTKQ38
  edit slug —> old name redirects to new:
          - api-upsert-categories.2browsers.test.ts  TyT503KRDH24  (not impl)
  unlist:
            - categories-basic.3br.d   TyTCATSBASIC
  sort order:
            - cats-perf-many.2br.d  TyTECATPREFMNY.TyTCATORDR
  delete:
          - categories-delete.2br   TyTE2ECATDEL01
    gets marked as deleted for staff:
    hidden for non-staff:
    topics hidden unless staff:
          - backlinks-basic.2br.d  TyTINTLNS54824.TyTDELCATTPC054
    topics not found when searching:
    can undelete:
    backlinks from topics inside disappear:
          - backlinks-basic.2br.d  TyTINTLNS54824.TyTDELCATBLNS
  permissions:   (1QRY7)
            - category-perms.2br.d  TyTE2ECATPREMS01
            - cats-perf-many.2br.d  TyTECATPREFMNY.TyTPRIVCATS
            - promote-demote-by-staff-join-leave-chats.2br.test.ts  TyTE2E5H3GFRVK
            - link-previews-internal-not-see-cat.2br  TyTE2ELNPVIN4837.TyT0ACSPG043
            - link-previews-internal-to-cats-not-see.2br.f  TyTE2ELN2CAT
    new cat security config:
            - perms-see-own.2br.f   TyTPERMSEEOWN.TyTDEFCATPERMS & TyTSTAFDEFPERMS
    new group perms security config:
            - perms-see-own.2br.f   TyTPERMSEEOWN.TyTNEWPERMSEMPTY
    see-own:
            - perms-see-own.2br.f   TyTPERMSEEOWN  CR_MISSING
            - categories-basic.3br.d   TyTCATSBASIC.TyTSEEOWN
      move cat & back:
            - TESTS_MISSING: Move away: Doesn't inherit.  Move back: does.
                But there are other such tests? Not so important.
    topics on cats list page:
            - category-perms.2br.d  TyTE2ECATPREMS01.TyTSEECATTOPS
            - cats-perf-many.2br.d  TyTECATPREFMNY.TyTSEECATTOPS
    padlock icon:
            - category-perms.2br.d  TyTE2ECATPREMS01.TyTCATLOCK
    sub cats:
            - category-perms.2br.d  TyTE2ECATPREMS01.TyTPRIVSUBCA
    link previews:
            - link-previews-internal-not-see-cat.2br  TyTE2ELNPVIN4837.TyTE2ELNSUBCAT
            - link-previews-internal-to-cats-not-see.2br.d  TyTE2ELN2CAT.TyTE2ELNSUBCAT
  upsert categories:  (upscats)
  move topic to new category:
            - link-previews-internal-may-not-see-cat.2br  TyTE2ELNPVIN4837.TyTMVPG2OTRCAT
            - embcom.comment-counts.2br.ec.cors  TyTE2ECOMCOUNTS.TyTMVPG2CAT

  sub categories:
    create,
    move base cat to other cat so becomes sub cat:
            - CategoriesDaoAppSpec.scala
            - category-perms.2br.d  TyTE2ECATPREMS01.TyTMOBACAT
    move sub cat to other base cat:
          - CategoriesDaoAppSpec.scala
          - TESTS_MISSING: UX tests   [TyTE2E305TMP24Z]
    permissions:
      see:  (1QRY7)
    find sub tree categories:
      CatsCanSee.catsInSubTree():
            - TESTS_MISSING

tags, post tags, content tags,
badges, user badges, user flairs:
            - badges-basic.2br  TyTE2EBADGESBSC
            - tags-basic.2br  TyTE2ETAGSBSC
  nav to tags list, via 'View Categories, Tags':
            - TESTS_MISSING
  list tagged posts:
            - TESTS_MISSING   TyTLISTTAGDPOSTS
    can't see private pages via tagged posts list:
            - TESTS_MISSING   TyTLISTTAGDPOSTS
  works for oneself and others who are already online,
      (there was a bug where users-online-data without tags overwrote users with tags),
  works for others who goes online: (WS message with user):
            - tags-badges-not-missing.2br  TyTETAGS0MISNG.TyTPRESENCE01
  works also if post not approved:
            - tags-badges-not-missing.2br  TyTETAGS0MISNG.TyTTAGUNAPRPO
            - tags-badges-not-missing.2br  TyTETAGS0MISNG.TyTUNAPRPATBADGE
  invalid names: too long, short, commas. Unique key error:
            - TESTS_MISSING
  server side tag tests:
            - TESTS_MISSING see:   TyTIT_TAGS
  
tags with values:
            - do-api-create-pages-comts-check-webhooks-search.2br  ?
  cannot create tags with the wrong value type: (different from the tag type's value type)
            - TESTS_MISSING  TyTTAGVALBADTYPE

# Move to ^security:  ?
access permissions,
permissions -
  category -
    change to staff-only —> globally pinned chat dissappears from stranger's watchbar  (6KWQ2)
    change back —> globally pinned chat reappears in watchbar  (6KWQ2)
    see: (1QRY7)

topics -
  go back to forum:
          - api-upsert-pages.2browsers.test.ts  TyT602FKUDLSV
  create topic -
    in no category:  create-site-all-logins, part of create-with-password-account (7UC2)
    in a category: ("almost all" tests do this)
    from categories list:
          - drafts-new-topic-from-cats-page.test.ts  TyT502RKD472
    change category:
    change topic type:
  edit -
    edit title -
      private chat:
            - private-chat.3browsers  TyT7UKAB20
    change category:
    change type:
    change url:
  pin -
    globally:  (6KWQ2)
          - login-required-join-global-chat.2br.test.ts  TyTE2E603MAT53
          - promote-demote-by-staff-join-leave-chats.2br.test.ts  TyTE2E5H3GFRVK
    in category:
            - move-posts-pin-delete.2br.d  TyTMOPOPINDEL.TyTPININCAT
  close:
    close,
    can leave bottom comment afterwards,
    can reply afterwards:
            - page-type-question-closed.2br.d  TyTPATYQUESTCLOSD
  discussions:
            - page-type-discussion-progress.1br.d  TyTPATYDISC
  ideas,
  doing status (planned/started/done):
            - page-type-idea-statuses-comments.2br.d  TyTPATYIDEA
            - do-api-upvote-ideas-sort-by-votes.2br.d  TyTDOAPI_UPVOTE_IDEAS
  problems:
  solved status (planned/started/fixed):
            - page-type-problem-statuses.2br.d  TyT602AKK73
  questions:
    answer own:
            - page-type-question-closed.2br.d  TyTPATYQUESTCLOSD
    cannot answer others:
            - page-type-question-closed.2br.d  TyTPATYQUESTCLOSD
    click-scroll to answer:
    clear answer:
            - page-type-question-closed.2br.d  TyTPATYQUESTCLOSD
    delete the answer post, question becomes unsolved: [2JPKBW0]
    move answer post to other page —> question unsolved: BUG?
    staff accepts answer:
          - modn-from-disc-page-review-after.2browsers.test.ts  TyTE2E603RKG4.TyTE2E50ARMS
  info pages:
          - page-type-info-page.1br.d  TyTE2E503MKTR3
  report:
  bump topic, so first in category topic list:
          - api-upsert-pages.2browsers.test.ts  TyT602FKUDLSV
  scroll and load #post-nnn,
  load more posts:
          - MISSING  but for embedded comments: TyT603MRKH592S
          - For embedded comments: (50279460)
  squash siblings:
            - dir.summarize-squash-siblings.2br  TyTESQUASHSIBL
  summarize comments:
            - TESTS_MISSING


topic navigation,
navigation:
  rewrite page url from  /-page_id  to  /page-slug:
          - notfs-like-votes.2browsers.test.ts  TyTE2E703KDH.TyTE2EPGID2SLUG


edit,
editor -
  edit post:
          - drafts-reply-edit-dir-msg.2browsers.test.ts   TyT5A2HSL8
    edit wiki post:
          - permissions-edit-wiki-posts.2browsers.test.ts  TyT603RKDEJ46
  maximize editor:
          - embed-twitter-tweets-etc.test.ts  TyT0JSM8PF68.TyT033SKHWW73M
  preview:
    not embedded:
      in editor preview:
            - editor-toolbar-preview.1br  TyTEEDTOOLBTNS
      in page preview:
            - TESTS_MISSING barely needed
    just one comments iframe:
            - TESTS_MISSING barely needed
    many comments iframes:
      replies:
            - embcom.manyframes.drafts-repl-to.2br  TyTEMANYCOMIFR02.TyTREPREVW
            - TESTS_MISSING actually scroll between replying-to-post and reply preview
            - TESTS_MISSING preview placed just below post being replied to
      edits:
            - embcom.manyframes.drafts-repl-to.2br  TyTEMANYCOMIFR02.TyTEDPREVW
            - TESTS_MISSING scroll to edits preview
  upload things:  (7KFC2)
  toolbar buttons:
            - editor-toolbar-preview.1br  TyTEEDTOOLBTNS
  similar topics:
          - group-permissions-similar-topics.2browsers.test.ts  TyT05BMRSH2J
  late edits:
            - review-edits-ninja-late.2browsers.test.ts  TyTREVWEDTLATE.TyTLADEETD01
  ninja-edit:
          - view-edit-history.2browsers.test.ts  TyT60RKDWL25.TyTNINJA01
          - review-edits-ninja-late.2browsers.test.ts  TyTREVWEDTLATE.TyTNINJED02 TESTS_MISSING
  view edit revisions,
  view edit history:
          - permissions-edit-wiki-posts.2browsers.test.ts  TyT603RKDEJ46.TyTEDREVS02  TESTS_MISSING
          - view-edit-history.2browsers.test.ts  TyT60RKDWL25
  save edits from other page:
    should ask: "Jump back and view the now edited post?" [JMPBCK]
  slow 3g:
          - slow-3g-navigate-edit-drafts.2browsers.test.ts   TyT40PKDRT4

sanitize posts,
sanitizer,
sanitizing,
clean html:
  [rel_nofollow]:
          - sanitize-posts.2browsers.test.ts  TyT603RMDL3.TyTRELNOFLW01
  [reverse_tabnabbing]:
          - sanitize-posts.2browsers.test.ts  TyT603RMDL3.TyTREVTABNAB01

mentions:
  simple:
          - email-notfs-discussion.test.ts  TyT4FKA2EQ02
  edit, add new @username:
          - email-notfs-discussion.test.ts  TyT2WREG78
  edit, remove @username and add back
          - notf-emails-discussion.2browsers.test.ts   TyT2ABKS057 (bug?: mention is re-sent)
  unusual chars:
          - weird-usernames.2browsers.test.ts  TyT5ABKPUW2
  group mentions:
          - group-mentions.2browsers  TyT4AWJL208R
  channel mentions:
    mention @all in DM:
            - TESTS_MISSING  was a bug but fixed
                  (notfCreatedAlreadyTo() didn't want groups as message members)
    mention @all in chat:
  no dupl mentions when combining @channel, @member, @group:
  when really many members:
          - many-users-mention-list-join-group.2browsers.test.ts  TyT2602SKJJ356

  may mention me trust level:
            - block-mentions.2br.d  TyTMAYMENTION
  mentioning users w private profiles:
            - privacy-may-see.3br.f.e2e.ts  TyTPRIV_MAYSEE.TyTPRIV_MENTION02


link previews:
  editor maximized, split, noraml,
  innline-in-page,
  in-editor:
          - link-previews-images-mp4-youtube.1br.extln  TyTE2E2G3MAWKT4
          - embed-twitter-tweets-etc.test.ts  TyT0JSM8PF68   RENAME to link-preview-twitter?
  auto-size sandboxed iframe:
          - TESTS_MISSING  TyT037MKAH24
  [reverse_tabnabbing]:
          - TESTS_MISSING
  misc providers:
          - link-previews-all-others.test.ts  TyT550RMHJ25
  internal links:  # (687295)
  to page/post one may not see:
    restricted category:
          - link-previews-internal-not-see-cat.2br  TyTE2ELNPVIN4837
    see-own category:
            - perms-see-own.2br.f  TyTPERMSEEOWN.TyTLNSEEOWN
    private message:
    private chat:
    whisper post:
    deleted post:
  changed to https if server uses https:   # [E2EHTTPS]
          - link-previews-http-to-https.1br.test.ts  TyTE2ELNPVHTTPS
          - embedded-comments-uploads-origin.test.ts  TyT603RKDJA6.TyT6930MRDN4
            # both tests emb coms, and not emb
    for embedded comments: (HTTP2S)
  changed to any CDN:
          - embedded-comments-uploads-origin.test.ts  TyT603RKDJA6
          - TESTS_MISSING: CDN w/o emb coms.
          (Not tested here: upload-images-and-files  TyT50E6KTDU7 )

backlinks,
internal links:  # (687295)
  blockquote:
          - backlinks-basic.2br.d  TyTINTLNS54824
          - link-previews-internal-may-see.2br  TyTE2ELNPVIN7252.TyT606SRTR3
          - link-previews-internal-not-see-cat.2br TyTE2ELNPVIN4837.TyT60T6SRTR3
  inline, just title:
          - TESTS_MISSING
  to category:
            - link-previews-internal-to-cats-not-see.2br.d  TyTE2ELN2CAT
  see-own category:
            - perms-see-own.2br.f  TyTPERMSEEOWN.TyTLNSEEOWN

discussion -
  users on page:
  recent comments:
  reply:
  two users, replies:
  build tree:
    A
      A1
        A11
         A111
         A112  - check indentation depth
        A12  - check indentation depth
      A2
        A21  - check indentation depth
        A22  - check indentation depth
    B
      B1
      B2
      B3  -- check indentation depth
  live updates:  (4FE2)

  nesting depth of replies:

  sort order of replies:
    best first:
            - votes-and-best-first  TyTESORTBEST
            - embcom.sort-order-op-likes-btn-txt.2br.ec  TyTEMBSORTLIKETXT
    oldest first:
            - embcom.drafts-previews-not-logged-in.2br.e2e.ts  TyT2ZBKPW048.TyTPOSTORDR
    newest first:
            - embcom.sort-order-op-likes-btn-txt.2br.ec  TyTEMBSORTLIKETXT.TyTEMBNEWEST1ST
  sort order of topics:  see _topic_order

large pages,
really large:
  missing, [LARGEPAGES]

post -
  share dialog,
  copy address:
          - move-posts-same-page.2br.d  TyT03946HET3
          - move-posts-other-page.2br.d  TyT7038286BR3
  move post:
    move to different page section,
    move to differen parent, same page:
          - move-posts-same-page.2br.d  TyT03946HET3
    move to differen parent, other page:
          - move-posts-other-page.2browsers.test.ts  TyT7038286BR3
          - move-posts-newer-page-reply.2br.d  TyTMOPONEPG
          - move-posts-pin-delete.2br.d  TyTMOPOPINDEL
  view edit history:
  votes -
    cast all types:      votes-and-best-first.test.ts
    like –> sort order:  votes-and-best-first.test.ts
    wrong –> warning:
    bury –> sort order:  votes-and-best-first.test.ts
    unwanted –> karma:
    see who voted:
  delete:  [.delposts]
  wikify:
          - permissions-edit-wiki-posts.2browsers.test.ts  TyT603RKDEJ46
  flag -   — also see (6JS3)
    cannot flag delted post:
  view author -
    click opens dialog:
    mentions click opens dialog:
          - weird-usernames.2browsers.test.ts  TyT2WAB5UY
    profile shown:
    ban guest:
    send message:
  change author:
            - TESTS_MISSING  TyTXAUT6920   plus, unimplemented
  submit reply, after having navigated to other page:
    should ask: "Jump back and view your new reply? It's on another page" [JMPBCK]

messages,
private messages,
DM:s,
direct messages:
            - direct-messages-notfs.3br.d  TyT602RKDL42
  delete posts,  [.delposts]
  test email notf link:
            - direct-messages-delete.2browsers.test.ts   TyT5033FKSNS57
  not searchable by the wrong people:
            - api-search-full-text.1br.f  TyT70ADNEFTD36.TyT5027KRUTP
  may direct-message me trust level:
            - block-dir-msgs.2br.d  TyTBLOCKDIRMSGS

chat:
  create channel:  chat.2browsers.test.ts  (4FE2)
    two users chat:         ==
          - login-required-join-global-chat.2br.test.ts  TyTE2E603MAT53
          - promote-demote-by-staff-join-leave-chats.2br.test.ts  TyTE2E5H3GFRVK
  add/remove member:  private-chat.3browsers.test.ts
  join/leave channel:       ==
    self join, auto leave:
          - login-required-join-global-chat.2br.test.ts  TyTE2E603MAT53
          - promote-demote-by-staff-join-leave-chats.2br.test.ts  TyTE2E5H3GFRVK
  joinless chat:
            - TESTS_MISSING
  private chat:             ==
            - private-chat.3br.d  TyT2ABKR045
    not searchable:
            - api-search-full-text.1br.f  TyT70ADNEFTD36.TyT602SKDL52
  shows last 50 messages:
  pin globally —> appears in watchbar:  (6KWQ2)
  create, when in no site section:
          - chat-create-from-direct-message.2browsers.test.ts  TyT5FKB2A
          - chat-create-from-profile-pages.2browsers.test.ts  TyT306RAKN2 TyTPAGENOTF
          - api-search-full-text.1br.f  TyT70ADNEFTD36.TyT602SKDL52
  switch to advanced editor:
          - drafts-chat-adv-ed.2browsers.test.ts  TyT7JKMW24
  delete chat message:
          - admin-review-cascade-approval.2browsers.test.ts  TyT0SKDE24.TyT052SKDGJ37
  messages not merged:
          - admin-review-cascade-approval.2browsers.test.ts  TyT0SKDE24.TyT0527X8M302

embedded comments:
  create site:
            - embcom.create-site-req-verif-email-exit-tours.2br TyTE2ECREMBCOM1
            - no verif email
  no about page created:  [5WAKR02]
  post comment:
          - "all" e2e emb cmts tests
  post 1st comment, edit:   TESTS_MISSING
    when unapproved:
    auto approved:
  compose before
    login:
            - embcom.drafts-previews-not-logged-in.2br  TyT2ZBKPW048
    signup:
            - TESTS_MISSING  TyTEMBCOMPBEFLGI  # missing, right?
  vote before page exists:
          - embcom.vote-bef-page-exists.1br  TyT2AKBS056
  config notf prefs before page exists:
          - embedded-comments-conf-notf-pref-first.test.ts  TyT502HMSJP3
  login via metabar:
          - embcom.vote-bef-page-exists.1br  TyT2AKBS056
          - embedded-comments-scroll  TyT2K4DHR49-02
  (50279460),
  ignores query params:
            - embcom.ignore-query-params.2br  TyTEEMCIGQPRMS
  sort order:
            - embcom.sort-order-op-likes-btn-txt.2br.ec  TyTEMBSORTLIKETXT
  scroll and show #comment-n:
          - embedded-comments-scroll  TyT2K4DHR49-05
  scroll and load #comment-nnn:
          - embedded-comments-scroll-and-load-more.2browsers.test.ts  TyT603MRKH592S.TyT03RMET742M
  load more comments:
          - embedded-comments-scroll-and-load-more.2browsers.test.ts  TyT603MRKH592S
  won't auto scroll to last read comment:
  (usually the blog post more interesting? so don't auto scroll):
          - embedded-comments-scroll  TyT2K4DHR49
  copy comment link,
  auto scrolls to #comment-N:
          - embedded-comments-scroll-embedding-page.test.ts  TyT2K4DHR49
  import with discussion id:
          - MISSING
  import from Disqus xml export file:  (impexp)
          - embedded-comments-create-site-import-disqus.2browsers.test.ts  TyT5KFG0P75
  image links work although <base> tag: (EMBORG)
  won't load at wrong domain / origin / hostname:
          - TESTS_MISSING TyT3059J267P, problem in wdio 6
                embedded-comments-create-site-no-verif-email-admin-area-tour.2browsers.test.ts
  different discussion id:
          - embedded-comments-discussion-id.test.ts   TyT603KRDL46
  place in custom categories:
          - embedded-comments-category-refs.2browsers.test.ts   TyT03RKHJF59
          - embedded-comments-cat-refs-and-disc-ids.2browsers.test.ts  TyT603WDL46
  notf about new discusion:
          - embedded-comments-category-refs.2browsers.test.ts   TyT03RKHJF59.TyT063AKDGW60
  comment counts:
            - embcom.comment-counts.2br.ec.cors  TyTE2ECOMCOUNTS
            - embcom.manyframes.comment-counts.2br.cors  TyTE2EMNYFRCOMCNTS
  many comments iframes same page:
            - embcom.manyframes.basic.2br  TyTEMANYCOMIFR01
            - embcom.manyframes.drafts-repl-to.2br  TyTEMANYCOMIFR02
            - embcom.manyframes.js-api.2br  TyTEMANYEMBDISAPI
            - embcom.manyframes.js-api.sso.2br.ec  TyTEMANYEMBDISAPISSO
            - embcom.manyframes.comment-counts.2br.cors  TyTE2EMNYFRCOMCNTS
  installation mistakes:
    don't load js script twice:
            - embcom.dont-load-script-twice.1br.ec  TyTECLOADTWICE
  log levels,
  on-load callbacks:
            - embcom.log-levels-on-loaded.1br.ec  TyTECLOGSCLBKS
  sso: see [_embcom_sso]

upload links,
uploads -  (7KFC2)
  upload posts with pics:
          - upload-images-and-files.test.ts  TyT50E6KTDU7
          TESTS_MISSING: Verify the images actually appears — Wdio visual regression test
  upload profile pic:  (8PK2)
  upload jpg, png:
          - TESTS_MISSING  embcom.expimpjson.create-site-exp-json.2br  [402KGS4RQ]
  upload video:
  upload pdf, tar.gz:
  changed to https if server uses https:  (HTTP2S)  # [E2EHTTPS]
          - embedded-comments-uploads-origin.test.ts  TyT603RKDJA6.TyT6930MRDN4
  embedded origin added,  (EMBORG)
  pub site id added:
          - embedded-comments-uploads-origin.test.ts  TyT603RKDJA6
  upload too large file:
    browser rejects immediately:
          - upload-images-and-files.test.ts  TyT50E6KTDU7.TyTE2ETOOLGUPL
    server rejects if browser didn't:
          - upload-images-and-files.test.ts  TyT50E6KTDU7.TyTE2ESVUPLCK
  paste images and files from clipboard:
    placed at cursor:

recent comments:

contextbar:
  switch to users online:
            - tags-badges-not-missing.2br  TyTETAGS0MISNG.TyTPRESENCE01

users online -
  forum:
    I go on/off:
    other on/off:
  discussion:
    I go on/off:
    other on/off:
            - tags-badges-not-missing.2br  TyTETAGS0MISNG.TyTPRESENCE01
  chat:
    I go on/off:
    other on/off:
  unchanged after server restart:
  not see if I'm online:
            - see [.noise_and_privacy]
            - all   _anon_e2e_to_code_review

watchbar -
  recent list:
  chat list:
  page highlighted:
          - promote-demote-by-staff-join-leave-chats.2br.test.ts  TyTE2E5H3GFRVK
  chats appear / disappear when trust level changes:
          - promote-demote-by-staff-join-leave-chats.2br.test.ts  TyTE2E5H3GFRVK

track reading progress:
  posts not/in viewport:
          - notfs-mark-seen-as-seen  TyT2AKBR0T
  live updates of notifications seen:
          - notfs-mark-seen-as-seen  TyT2AKBR0T
  promote:
          - TESTS_MISSING  TyTE2E603RM8J

live updates -  (4FE2)
  forum latest topic list:
  discussion:
  chat: chat.2browsers.test.ts

links -  see navigation-as-admin/member/stranger
  forum category:
  forum topic in category view:
  forum topic in topics view:
  forum avatar:
  hamburger:
  profile:
  contextbar -
    recent comment:
    user:
  profile -
    notification:
    to admin:
  back to site:

site settings:
  login -
    allowed email domains:
          - settings-allowed-email-domains.extidp.2br  TyT5AKRD04
    login required:
            - settings-toggle-login-required.3br.d  TyT4GKBW20
            - login-required-oauth-signup-login.test.ts  TyT406MRTJW2
            - login-required-join-global-chat.2br.test.ts  TyTE2E603MAT53
            - admin-user-approve-reject.2browsers.test.ts  TyT5KHEWQ2
    invites only:
    approve members:
            - settings-approve-members.2browsers.test.ts  [TyT2HUWX8]
            - admin-user-approve-reject.2browsers.test.ts [TyT5KHEWQ2]
            - create-private-site-password.2br.f  TyTCRSITPRIVPW.TyTUSRAPPREQ
    expire idle session:
            - login-expire-idle-after.2browsers.test.ts  TyT7RBKTJ25
    allow signup:
    allow local signup:
    guest login allowed:
    disable gmail -
      button gone:
      cannot disable if admin uses gmail henself:
    disable facebook -
      button gone:
      cannot disable if admin uses fb login henself:
    disable github:
    disable twitter:
  require verified emails:
    turned on later, when already users w/o verified emails:
            - TESTS_MISSING  [old_users_verif_email]
  moderation:
    num to review,
    num to approve,
    num to allow:
            - admin-review-cascade-approval.2browsers.test.ts  TyT0SKDE24

tips,
announcements:
            - hide-unhide-tips.2br  TyTE2EHIDETPS329
notices,
announcements:
            - show-admin-notices.2br.e2e.ts  TyTE2EADMNTC


intro tours:
  admin area, community, admin tour:
          - create-site-password-run-admin-intro-tours.test.ts  TyT7BAWFPK9
  admin area, blog comments, admin tour:
          - embedded-comments-create-site-no-verif-email-admin-area-tour.2browsers.test.ts  TyT6KRKV20
  forum section, community, admin tour:
          - create-site-password-run-admin-intro-tours.test.ts  TyT7BAWFPK9
  forum section, blog comments, admin tour:
          - embedded-comments-forum-intro-tour.test.ts  TyT6AKBR2044
  exit tour:
    directly:
            - embcom.create-site-req-verif-email-exit-tours.2br TyTE2ECREMBCOM1.TyTTOUREXIT
    after a step:
            - create-private-site-password.2br.f  TyTCRSITPRIVPW.TyTTOUREXIT
  restart tour:  [TyT2ABKRT05]


admin:
  new admin intro tours:
          - create-site-password-run-admin-intro-tours  TyT7BAWFPK9
  user page:  [5RBKWEF8]
          - admin-user-approve-reject.2browsers.test.ts  [TyT5KHEWQ2]
          - admin-user-staff.2browsers.test.ts  [TyT2GKFI594]
          - admin-user-suspend.2browsers.test.ts  [TyT5GKQSG2]
    change threat level:
          - admin-user-threat-mild.2browsers.test.ts  [TyT2WKBG4Z]
          - admin-user-threat-moderate.2browsers.test.ts  [TyT5KHFIQ20]
    change trust level:
          - promote-demote-by-staff-join-leave-chats.2br.test.ts  TyTE2E5H3GFRVK
  cannot bad-click break an admin, e.g. unverifying hens email or unapproving, rejecting:
          - (missing) [5AEWBN0]
  members tab:
    really many members:
          - many-users-mention-list-join-group.2browsers.test.ts   TESTS_MISSING  TyT60295KTDT
  terminate someone else's sessions:
            - d.sessions-staff-logout-others.4br  TyTESESLGOOTR


moderation,
approve before,
review after:
    author names:
            -  modn-ban-spammer.2br.f  TyTMODNBANSPM.TyTMODN_AUTHRNAME
    ninja edits,
    normal edits,
    late edits
            - review-edits-ninja-late.2browsers.test.ts  TyTREVWEDTLATE.TyTLADEETD01 .TyTNINJED02
    gets emailed about mod tasks:  (502M7)
          - new-member-allow-approve.2browsers.test.ts  TyT4AKBJ20
          - new-user-review-ok.2browsers.test.ts  TyT39657MRDT2
    #no skip this?:
    #new members notfd when posts approved:  see (60MR2)
    see spam below: (4BKS0)
    delete flagged:   — also see (6JS3)
    clear flag:   — also see (6JS3)
    approve posts:
            - admin-user-threat-mild.2browsers.test.ts  [TyT2WKBG4Z]
            - admin-user-threat-moderate.2browsers.test.ts  [TyT5KHFIQ20]
            - topic-prominent-pats-reply-approve.2br.d  TyTPROMPATS_REAPR
      with tags:
            - tags-badges-not-missing.2br  TyTETAGS0MISNG.TyTAPRTGDPO

    undoReviewDecision: [4JKWWD4]
    ... lots of stuff ...
    bad user auto-banned:
    invalidating review tasks: [2VSP5Q8]
      band & delete all:
            - modn-ban-spammer.2br.f  TyTMODNBANSPM
      reject-delete post:
            - admin-review-invalidate-for-reply.2browsers.test.ts  TyT6KWB42A
      reject-delete page:
        other review task same page get invalidated:
        delete one post on the deleted page:
        undelete page, other tasks reactivated:
        the deleted post's task not reactivated:  ?? or maybe don't delete review tasks, if deleting post?
                      what if Mallory posts bad stuff, gets flagged, deleted the flagged post?
                      and then staff wouldn't get notified, because deleted?
      delete page for review task -
        gets invalidated:  — no, not?  keep active, so staff notices the user is maybe bad? Yes keep.
        restore page, active again:
      delete post for review task -
        gets invalidated:  — no.
        restore page, active again:
      delete ancestor post for review task -
        task gets invalidated:
        undelete ancestor, active again:
      delete review task post -
        task gets invalidated:
        then delete & restore ancestor post tree: task not reactivated
        then delete & restore page: task not reactivated
    review tasks and authz -
      mods won't see other's flagged direct message posts:
          - mod-review.2browsers.test.ts  TyT6KRBEQ2
  cascade approval:
    old chat message already approved,
    deleted posts ignored,
    remaining get approved:
          - admin-review-cascade-approval.2browsers.test.ts  TyT0SKDE24
  mod new page:
            - modn-approve-before.2browsers.test.ts  TyTE2E52RKDHI.TyTAPRTHRPG01
            - modn-from-disc-page-appr-befr.2browsers.test.ts  TyTE2E603RTJ
            - topic-prominent-pats-reply-approve.2br.d  TyTPROMPATS_REAPR.TyTAPRTHRT
  mod first posts:
          - FirstPostsAppSpec.scala  TyTIT205RKDJ4
          - modn-appr-bef-comb-w-revw-aftr.2browsers.test.ts  TyTE2E05RKD3
          - NotfsAppMentionsSpec.scala  TyTIT50267MT
  require approval before:
    see own, not others:
          - new-member-allow-approve.2browsers.test.ts  TyT4AKBJ20.TyTE2E042RT
          - modn-from-disc-page-appr-befr.2browsers.test.ts  TyTE2E603RTJ.TyTE2E603SKD
    edit own:
          - new-member-allow-approve.2browsers.test.ts  TyT4AKBJ20.TyTE2E306RKP
    staff can edit:
          - modn-from-disc-page-appr-befr.2browsers.test.ts  TyTE2E603RTJ.TyTE2E407RKS
    staff can reply to not yet approved pages and comments:
            - topic-prominent-pats-reply-approve.2br.d  TyTPROMPATS_REAPR.TyTREBEFAPR
  require approval before, if trust less than:
          - modn-approve-before.2browsers.test.ts  TyTE2E52RKDHI
          - modn-appr-bef-comb-w-revw-aftr.2browsers.test.ts  TyTE2E05RKD3
          - server side: TyT305RKTH205
  require approval before, if threat:
            - topic-prominent-pats-reply-approve.2br.d  TyTPROMPATS_REAPR.TyTAPRTHRT
  require approval before, because flagged:
          - flag-member-block-agree.2browsers  TyTE2EFLGMEMBLK.TyTE2EFLAGTRTMOD
  review after, if trust less than:
          - modn-review-after.2browsers.test.ts  TyTE2E402GRM
          - modn-appr-bef-comb-w-revw-aftr.2browsers.test.ts  TyTE2E05RKD3
  hide completed review tasks:
          - modn-review-after.2browsers.test.ts  TyTE2E402GRM.TyT05KD2SM1
          - modn-approve-before.2browsers.test.ts  TyTE2E52RKDHI.TyT05KD2SM1

  approve deleted post:
          - TESTS_MISSING   [apr_deld_post]
    # Delete posts waiting for approval,  then approve one, undelete.
    # Reject one — cannot undelete it.
    # Undo reject, and undelete — then, can approve?
    # Delete whole page. Undelete page. Then can approve / reject afterwards.
  moderate from page:
            - modn-from-disc-page-appr-befr.2browsers.test.ts  TyTE2E603RTJ
            - tags-badges-not-missing.2br  TyTETAGS0MISNG.TyTAPRTGDPO
            - topic-prominent-pats-reply-approve.2br.d  TyTPROMPATS_REAPR.TyTAPRTHRT
    other mod moderates just after, from moderation page:
          - TESTS_MISSING TyT204RKSTEM

  review from page implicitly:
          - modn-from-disc-page-review-after.2browsers.test.ts  TyTE2E603RKG4

  mod task emails: TESTS_MISSING
    #$r s/wdio --only mod-task-emails-approve-before.2browsers $args
    # new member posts new topic, mentions Alice and Adam & Memah.
    #    Alice & Adam get mod task emails: approve-before.
    #    Alice approves.
    #    Adam & Memah get @mention notfs — but not Alice.  Bug just fixed  [306RDLA4]

    #$r s/wdio --only mod-task-emails-review-after.2browsers $args
    # new member posts new topic, mentions Alice and Adam & Memah.
    #    Alice & Adam get mod task emails: review-after.
    #    Memah get a @mention notfs — directly.
    #    Alice okays.
    #    Memah visits reply — sees it.
    # new member posts reply, mentions Alice and Adam & Memah.
    #    Alice & Adam get mod task emails: review-after.
    #    Memah get a @mention notfs — directly.
    #    Alice deletes.
    #    Memah visits reply — not found.

report post,
flag post,
flags:
  auto threat level, moderate:
          - flag-member-block-agree.2browsers  TyTE2EFLGMEMBLK
  lock threat level:
          - flag-member-block-agree.2browsers  TyTE2EFLGMEMBLK.TyTE2ETHRLVDEF
  report post before logged in:
            - [.lazy_authn]

spam: (4BKS0)
          - spam-basic-local.2browsers.test.ts  TyT530KRM1R
          - spam-basic-local-ip-links-unblock.2browsers.test.ts  TyT602RGL4X
          - spam-basic-akismet.2browsers.test.ts  TyTSPAKISMET
          - spam-basic-akismet-false-positives.2browsers.test.ts  TyT205MKRRK0
          - spam-basic-akismet-false-negatives.2browsers.test.ts  TyT63MKWYT37
          - spam-basic-safe-browsing-api-blocked.2browsers.test.ts  TyTSPSAFEBRAPI
  ban spammer:
            - modn-ban-spammer.2br.f  TyTMODNBANSPM

delete user:    NEXT was a bug, when deleted by admin
  deletes henself:
  deleted by admin:

delete posts:  [.delposts]
            - delete-pages.2br  TyTE2EDELPG602.TyT602MREJ5
  delete one's own:
            - direct-messages-delete.2browsers.test.ts  TyT6036SKSSP
  cannot delete someone elses posts:
            - direct-messages-delete.2browsers.test.ts  TyT05GKRD45
  reply to deleted post:
            - direct-messages-delete.2browsers.test.ts  TyT6026RSP3J  BUG [063KRTL64]

delete pages,
undelete pages:
  admin deletes, undeletes:
            - move-posts-pin-delete.2br.d  TyTMOPOPINDEL.TyTEUNDELPG
  delete and undelete own page,
  cannot delete other's pages,
  cannot delete own pages with other's replies,
  can delete own pages with only one's own replies, <—— TESTS_MISSING  TyT7MEWQ3SF
  staff can delete everyone's pages:
            - delete-pages.2br  TyTE2EDELPG602
  cannot un/delete page if ancestor category deleted: (unless is staff)
            - TESTS_MISSING

moderators:
  profile says is moderator:
  can list users:
    - invites-by-mod-try-signup-after.2browsers.test.ts  TyT2PK703S
  can approve new site members:
  can suspend & silence & watch users:
  can reject comments:
    - mod-review.2browsers.test.ts  TyT4WKBDTQ
  can approve comments:
  can *not* read others' direct messages:
    - mod-review.2browsers.test.ts  TyT6KRBEQ2
  can send and view invites:
    - invites-by-mod-try-signup-after  TyT4FGJA20M

core members:
  can alter others' pages:
    Doing status, accept answers, change page type, open/close:
            - Various tests   TyTCORECAN

draft: [7WKABZP2]
  # Incls: save, load, list, navigate to, deleted when submitting post.
  beacon when suddenly closing page:
          - drafts-chat-adv-ed.2browsers.test.ts  TyT5ABKR20
          - drafts-new-topic.2browsers.test.ts  TyT5ABKR20
          - drafts-reply-edit-dir-msg.2browsers.test.ts  TyT5ABKR20
  new topic:
          - drafts-new-topic.2browsers.test.ts  TyT5BR20P4
          - drafts-new-topic-from-cats-page.test.ts  TyT502RKD472
  direct message:
          - drafts-reply-edit-dir-msg.2browsers.test.ts  TyT5ABKR20
  edits:
          - drafts-new-topic.2browsers.test.ts  TyT5BR20P4
          - drafts-reply-edit-dir-msg.2browsers.test.ts  TyT5A2HSL8
  reply:
          - drafts-reply-edit-dir-msg.2browsers.test.ts
  progress comment:
          (missing)
  chat & advanced and inline editor:
          - drafts-chat-adv-ed.2browsers.test.ts  TyT7JKMW24
  delete:
          - drafts-delete.test.ts  TyT5BKRQ0
          - draft previews [.dft_pvs]
  resume, delete in page:
            - embcom.drafts-previews-not-logged-in.2br  TyT2ZBKPW048.TyTINPGDFTS
  works also if not logged in:
            - forum-drafts-not-logged-in.2browsers.test.ts  TyT2ABSD73
            - embcom.drafts-previews-not-logged-in.2br  TyT2ZBKPW048
  anonymous drafts: 
            - TESTS_MISSING

  draft previews, resume and delete: [.dft_pvs]
    - some TESTS_MISSING if [many_ifr_my_page_data]
    - chat:
    - embeded comments:
            - embcom.drafts-previews-not-logged-in.2br  TyT2ZBKPW048
            - embcom.manyframes.basic.2br  TyTEMANYCOMIFR01.TyTEMBDFT02
                mainly in 1st iframe, not 2nd [many_ifr_my_page_data]
            - embcom.manyframes.drafts-repl-to.2br  TyTEMANYCOMIFR02
                mainly in 1st iframe, not 2nd [many_ifr_my_page_data]
    - upload image:
            - TESTS_MISSING
    - discussion topic:
    - load from browser storage:
    - go to drafts page w editor open, try open other draft:
    - edit post, save draft, submit edits from other page — draft not deleted?
    - –""– but for new reply
    - anonymous author preview: 
            - TESTS_MISSING

  # (reply, chat message, new topic, new(private/publ chat, edits, direct message.)
  # EditController.edit
  # GroupTalkController.sendMessage
  # PageController.createPage
  # ReplyController.handleReply
  # ReplyController.handleChatMessage
  # ReplyController embedded comments, if fixes [BLGCMNT1]
  # MessagesDao.startGroupTalk
  # PagesDao.createPage
  # PostsDao.insertReply, insertChatMessage, editPostIfAuth


tasks,
assign posts:
  basic functionality,
  notifications about assigned:
            - assign-to-basic.2br.d  TyTASSIGN01
            - assign-to-notfs.2br.d  TyTASSIGN02
  assigning oneself:
            - assign-to-basic.2br.d  TyTASSIGN01.TyTASGSELF
  can't assigning sbd who can't see the page:
            - assign-can-see.2br.d  TyTASSIGNCANSEE.TyERELPAT0SEEPOST_
  tasks in cats one can't see, are excluded if viewing sbd's task list:
            - assign-can-see.2br.d  TyTASSIGNCANSEE
  not notified about tasks one can't see:
      Expl: if sbd X has subscribed to a task page and Y is assigned to the page,
      but the task got moved to a private cat so none of them can see it any more,
      then, when the task gets completed (by sbd else),
      X and Y do *not* get any notification email about that (since they can't see the task)
            - assign-can-see.2br.d  TyTASSIGNCANSEE
  if one has created, or is subscribed to a page, but one may not
      see who is assigned (if any), then, one won't get notfications
      that show who's assigned:
            - assign-can-see.2br.d  TyTASSIGNCANSEE
  see assignee(s) in topic list:
            - topic-prominent-pats-basic.2br.d  TyTPROMPATS_BSC.TyTSEETOPICASGS


superadmin -
  ... lots of stuff ...

deactivate site -
  read-and-clean only:
  hidden unless staff:
  hidden unless admin:
  active again:
  deleted:
  purged:

restart server -
  restart app -
    verify still logged in:
    can post comment:
    complicated setting still enabled:
  restart nginx, redis, postgres -
    verify still logged in:
    can post comment:
    can create site:
    chat works:
  restart everything at once -
    ... same tests as above ...

notfs,
notifications:
  about direct replies:
            - notf-prefs-pages-replied-to.2br.test.ts  TyTE2E402SM53.TyTE2E60923RMT
            - ... plus many many many other tests ...
  about mod tasks:   — see (502M7)
  about direct messages:
            - direct-messages-notfs.3br.d  TyT602RKDL42
            - direct-messages-delete.2browsers.test.ts  TyT603KDTP74
  about public chat messages:
            - promote-demote-by-staff-join-leave-chats.2br.test.ts  TyTE2E5H3GFRVK  # hmm but only looks at email
  about private chat messages:
            - private-chat.3br.d  TyT2ABKR045
  about like votes:
            - notfs-like-votes.2browsers.test.ts  TyTE2E703KDH
  about tasks,
  about assigned:
            - assign-to-basic.2br.d  TESTS_MISSING  TyTASSIGN01
  via email:  (5ABKR024)
  mute all:
    notfs about assigned:
            - assign-can-see.2br.d  TyTASSIGNCANSEE.TyTMUTEASGNOTFS
  mute topic:
  mute category:
  watching-all for new topic:
          - notfs-mark-all-as-read  TyT5BKAR24H
  mark all as read:
          - notfs-mark-all-as-read  TyT5BKAR24H
  mark post one views as seen:
          - notfs-mark-seen-as-seen  TyT2AKBR0T
  about topics one may not see:
          - notf-prefs-private-groups.2browsers.test.ts   TyT406WMDKG26
  about replies in topics where one has replied:
          - notf-prefs-pages-replied-to.2br.test.ts  TyTE2E402SM53
  new topics:
          - api-upsert-page-notfs.2browsers.test.ts  TyT502RKTLXM296
          - ... more, which?
  snooze:
    replies, mentions:
          - notfs-snooze-talk.2browsers.test.ts  TyT782RKTL36R
    review tasks:
          - TESTS_MISSING   TyT04KSTH257


websocket,
live notfs,
live notifications -
  reply appears in 2nd browser:
            - delete-pages.2br  TyTE2EDELPG602.TyTWS702MEGR5
            - modn-ban-spammer.2br.f  TyTMODNBANSPM.TyTWS702MEGR5
  attacker tries to bypass authentication:
          -  TESTS_MISSING  TyTWSAUTH
  reconnects after disconnection:
          -  TESTS_MISSING  TyT20956QKSP2
  works after many long-polls:
    - basic-chat.2browsers.test.ts  [8T5WKBQT]  — can be removed? now with WebSocket instead
  works after disconnection: |   [5YVBAR2]
    There's: browser.setNetworkConnection(); see http://webdriver.io/api/mobile/setNetworkConnection.html
    and ChromeDriver set_network_conditions, seems more flexible: https://stackoverflow.com/a/46672769/694469
    And can patch: var orig = xhr.method; xhr.method = function(){ ... else return orig.apply(this, arguments); };
       — just call onerror in the patch?
    Larger patch example: https://codepen.io/mouseroot/pen/GgKezz?editors=1111
  new page, added to:
          - chat-create-from-direct-message  TyTPAGENOTF
          - chat-create-from-profile-pages.2browsers.test.ts  TyT306RAKN2 TyTPAGENOTF
  misc chat:
          - login-required-join-global-chat.2br.test.ts  TyTE2E603MAT53
          - promote-demote-by-staff-join-leave-chats.2br.test.ts  TyTE2E5H3GFRVK
  disconnected from chat, if removed from chat:
          - SEC_TESTS_MISSING  TyT6P03MRKD
  no more WebSocket messages,
    if account deleted,
    or if suspended,
    or session terminated:
          - SEC_TESTS_MISSING  TyTE0MOREWSMSG
  presence:
            - tags-badges-not-missing.2br  TyTETAGS0MISNG.TyTPRESENCE01
            - TESTS_MISSING  could add more, also for going offline

notf prefs inherited:
  one's own, from site, to cat, to topic:
          - notfs-prefs-inherit-own.2browsers.test.ts  TyT4RKK7Q2J
  inherits from groups and cats:
          - notfs-prefs-inherit-group.2browsers.test.ts  TyT5RKT2WJ04
          - notf-prefs-custom-groups.2browsers.test.ts  TyT60MRAT24
  chatty wins:
          - notfs-prefs-inherit-group.2browsers.test.ts  TyT20MRPG2
          - notf-prefs-custom-groups.2browsers.test.ts   TyT05NMSS4

email notifications:  (5ABKR024)
  change between Always / Unread / Only from staff / No / Never:
            - TESTS_MISSING   TyTE2E693RTMPG
  to staff when new member waiting to get approved to join the site:
            - settings-approve-members.2browsers.test.ts  TyT2HUWX8.TyTE2E502AHL4
  to new members when membership approved:
            - settings-approve-members.2browsers.test.ts  TyT2HUWX8.TyTE2E05WKF2
  #no skip this?:
  #to new members when their posts approved:  see (60MR2)
  #         - TESTS_MISSING  TyT4AKBJ20.TyTE2E062KR
  to staff about mod tasks:  (502M7)
            - new-member-allow-approve.2browsers.test.ts  TyT4AKBJ20
            - new-user-review-ok.2browsers.test.ts  TyT39657MRDT2
  watching everything:
            - email-notfs-discussion.2browsers.test.ts  TyT2AKBEF05
  new discourse reply:
            - do-api-like-and-subscribe.2br  TyTEAPILIKESUBS.TyTDISCRE08
            - search for waitUntilLastEmailMatches(), 100s of places
  new direct message reply:
            - direct-messages-notfs.3br.d  TyT602RKDL42
    email notf link:
            - direct-messages-delete.2browsers.test.ts   TyT5033FKSNS57
  private chat messages:
            - private-chat.3br.d  TyT2ABKR045
  mentions:
            - notf-emails-discussion.2browsers.test.ts   TyT4FKA2EQ02
            - promote-demote-by-staff-join-leave-chats.2br.test.ts  TyTE2E5H3GFRVK
            - search for waitUntilLastEmailMatches(), 100s of places
  watching:
  not until after email verified:
            - unsubscribe.2browsers.test.ts  [TyT2ABKR04]
            - embedded-comments-create-site-import-disqus.2browsers.test.ts  TyT305RKTH4
  new topics:
            - api-upsert-page-notfs.2browsers.test.ts  TyT502RKTLXM296
            - ... more, which?
  like votes:
            - notfs-like-votes.2browsers.test.ts  TyTE2E703KDH
  tasks,
  assigned:
            - TESTS_MISSING
  unsubscribe:
            -  (7ABKR023)
  cannot reply via email to email notifications:
            - cannot-reply-via-email.2br  TyTE0REVIAEML

custom forms:
            - custom-forms.3br.d  TyTCUSTFORMS

translations:
  edit button texts:
            - embcom.sort-order-op-likes-btn-txt.2br.ec  TyTEMBSORTLIKETXT.TyTCOMTBTNTTL

terms of use,
privacy policy:
  read after have signed up:
  read when signing up:
    public community:
      see top nav:
    private community, still accessible:   [7WKBAY02]
      no top nav:

# Test by disabling js, browser side?
server side rendering -
  topic list, discussion topic, chat:
    avatar image links ok:
    upload links ok:

  topic list -
    load more button works:
    click category:
    click tag:
    category dropdown:

api:
  webhooks: see [.webhooks_api]
  create site via api: [.create_site_via_api]
            - dir.create-site-via-api.2br  TyTE2ECREASITAPI
            - embcom.create-site-via-api.2br  TyTE2ECREAEMBSITAPI
            - site-api-secrets-not-global.2br.f  TyTSITESECR0GLOB.TyTCREASITSECR
  enable API:
            - embedded-comments-create-site-import-disqus.2br.test.ts  TyT5KFG0P75.TyTENAAPI
            - dir.create-site-imp-json.2br  TyTEIMPJSON01.TyTENAAPI
  ext id, weird chars and loong id:
          - api-upsert-categories.2browsers.test.ts  TyT602RHK42JF
  refs:
    userid:_, pageid:_,
    ssoid:_, tyid:_,
    extid:_ for users and pages,
    username:_, pagepath:_
            - do-api-like-and-subscribe.2br  TyTEAPILIKESUBS.TyTREFTYPES01
    tyid:_:
            - api-upsert-posts.2br.d  TyT60RKNJF24C
  upsert categories:  (upscats)
          - api-upsert-categories.2browsers.test.ts  TyT94DFKHQC24
  upsert pages:
    gets sanitized:
          - api-upsert-pages.2browsers.test.ts   TyT603PKRAEPGJ5
    gets sanitized, stops [reverse_tabnabbing]:
          - TESTS_MISSING
    gets sanitized in email:
          - api-upsert-posts.2br.d   TyT60RKNJF24C: TyT0RKDL5MW
    slugifying long and weird titles:
          - api-upsert-pages.2browsers.test.ts   TyT692SKBDWJ74
  upsert posts:
            - api-upsert-posts.2br.d   TyT60RKNJF24C
            - do-api-upvote-ideas-sort-by-votes.2br.d  TyTDOAPI_UPVOTE_IDEAS
    gets sanitized:
          - api-upsert-posts.2br.d   TyT60RKNJF24C: TyT0RKDL5MW
    notifications yes/no:
            - api-upsert-posts.2br.d   TyT60RKNJF24C.TyTUPSNTF825
  private chat:
          - api-private-chat-two-pps-sso-extid.2browsers.test.ts   TyT603WKVJW336
          - api-private-chat-two-pps-list-use-usernames.2browsers.test.ts  TYT6924VBNF962
  upsert-edit pages:
    &,
    sanitize html,
    long titles:
          - TESTS_MISSING  TyT650KWUDEPJ03g
  with sso enabled:
          - api-w-sso-upsert-pages.2browsers.test.ts  TyT60KRJXT4X3
            but not 100% real SSO, TESTS_MISSING, T703KUDHRPJ4
  notifications:  TyT3BG05KTJ2
          - api-upsert-page-notfs.2browsers.test.ts  TyT502RKTLXM296
    no notfs, by default:
          - api-upsert-pages.2browsers.test.ts  TyT305WKTUC2
  wrong api user, or not-allowed user type (guest or System):
          - sso-one-time-key-errors.2browsers.test.ts  TyT062SUNF3
  upsert user:
          - api-update-user-and-sso-user.2br   TyTE2E05MRR9
  import user with ssoid:
            - embcom.sso.token-direct-w-logout-url.2br.ec TyTE2EEMBSSO1.TyTIMPWSSOID
  list usernames:
          - TyT05RKVJF68
  list topics:
            - api-list-query-for-topics-popular-first.test.ts  TyT603AKSL25
    filters:
            - api-list-query-for-topics-recent-etc-first.test.ts  TyT5MRA8RJ7
  list posts:
            - api-list-query-for-posts.test.ts  TyT503RKDGF
  list restricted stuff via api secret:
            - api-list-query-for-posts.test.ts  TyT702KRJGF57
  search,
  full text search:
            - api-search-full-text.1br.f  TyT70ADNEFTD36
  get api:
            - api-get-query-for-pats.2br  TyTEAPIGETQPATS
            - embcom.comment-counts.2br.ec.cors  TyTE2ECOMCOUNTS
            - embcom.manyframes.comment-counts.2br.cors  TyTE2EMNYFRCOMCNTS
    specify same ref twice — not allowed? (wastes resources)
            - TESTS_MISSING  & unimpl
    specifies same thing via 2 different refs — then:  { seeIx: ___ }  instead of incl twice:
            - TESTS_MISSING  & unimpl

  do api:
            - do-api-like-and-subscribe.2br  TyTEAPILIKESUBS
            - do-api-upvote-ideas-sort-by-votes.2br.d  TyTDOAPI_UPVOTE_IDEAS
  atom feed:
            - TESTS_MISSING
  rss feed: No, there're only Atom feeds.

api for comments,
comments api,
embedded comments api:
            - embcom.manyframes.js-api.2br  TyTEMANYEMBDISAPI
            - embcom.manyframes.js-api.sso.2br.ec  TyTEMANYEMBDISAPISSO

url api,
frag action api,
url frag action api,
links like: http://site.localhost/forum/#composeTopic&category=slug:ideas
            - TESTS_MISSING
            - Not finished:
               frag-action-compose-topic.2br.f  TyTFRAGCOMPTO, search for  enum FragActionType.
  open drafts, linkToDraftSource():
            - drafts-new-topic  TyT5BR20P4.TyTFRAGACT


api,
webhooks:  [.webhooks_api]
            - webhooks-basic.2br  TyTE2EWBHKBASIC
            - webhooks-retry.2br  TyTE2EWBHKRETRY
            - TESTS_MISSING:  retry manually,  and both automatic + manally
            - webhooks-enable-disable.2br  TyTE2EWBHKENADIS
            - TESTS_MISSING:
                # webhooks-fails-breaks-fixed.2br  TyTE2EWBHKBREAKS (file not created)
                # and others, see [webhook_tests_missing]
  get sent about API actions:
    webhook sent if pages and posts upserted via API:
            - webhooks-for-api-upserts.2br  TyTE2EWBHK4API
    webhook sent if page updated (closed) via API:
            - TESTS_MISSING  TyTE2EWBHK4API.TyTEWHKSAPICLS
  list old events, so ext softw can catch up:
            - TESTS_MISSING

import,
export and restore:  (impexp)
  site patch:
            - embedded-comments-create-site-import-disqus.2browsers.test.ts  TyT5KFG0P75
            - dir.create-site-imp-json.2br  TyTEIMPJSON01
    import unapproved page and posts:
            - TESTS_MISSING
  import Disqus comments:
            - embedded-comments-create-site-import-disqus.2browsers.test.ts  TyT5KFG0P75
  export json:
    embedded comments:
            - embcom.expimpjson.create-site-exp-json.2br TyT7FKDJF3
  things remembered after exp-imp:
            - embcom.expimpjson.restore-overwrite-site-same-domain.2br  TyT5WKTJL025
            - embcom.expimpjson.restore-overwrite-site-new-domain.2br  TyT603KNF62
            - embcom.expimpjson.imp-to-new-site.2br  TyT4SLCD24S
  restore,
  overwrite current site:
            - embcom.expimpjson.restore-overwrite-site-same-domain.2br  TyT5WKTJL025
            - embcom.expimpjson.restore-overwrite-site-new-domain.2br  TyT603KNF62
  exp imp groups & members:
    import:
            - perms-see-own.2br.f   TyTPERMSEEOWN.TyTIMPGROUP
  exp imp images:
            - embcom.expimpjson.create-site-exp-json.2br  [402KGS4RQ]
  sanitize html:
            - api-upsert-pages.2browsers.test.ts   TyT603PKRAEPGJ5: TyT306KTG24M
  TESTS_MISSING:
    not yet enabled: 
            - embcom.expimpjson.imp-to-existing-site.2br.e2e-UNIMPL.ts  TyT7WKGKS269
  TESTS_MISSING:
    - Login w Gmail, FB, Twitter, LinkedIn, GitHub. Export, import. Still works?
    - Usernames, email addrs, stats, page visit stats, latest post — remembered accross exp-imp?
    - Edit built-in user's or group's name, remembered accross restore.
    - guestEmailPrefs, not yet incl in export
    - Include category ext id in imported dump. Also speeds up test. TyT60FKTEXK53


maintenance mode:
  start via API,
  change message:
            - plan-maintenance.2br.d  TyTPLANMAINT01
  Ty becomes read-only:
            - TESTS_MISSING (add to the above?)
  Sysbot secrets won't work for enabling:
            - site-api-secrets-not-global.2br.f  TyTSITESECR0GLOB.TyTMAINTSECR


limits,
rate limits:
            - tests/app/debiki/RateLimiterSpec.scala
  per site limits multipliers:
            - TESTS_MISSING

performance:
  categories list page:
    not too many db queries and writes:
            - cats-perf-many.2br.d  TyTECATPREFMNY.checkServerStats

latency,
3g,
slow 3g connections:
          - slow-3g-navigate-edit-drafts.2browsers.test.ts   TyT502KSTJGJ6

Tests to create:
  Login with pwd here: /-/users/id/109/activity, no .categories bug

3rd party integrations:
            - ghost.embcom.comments-basic.2br  TyTEGHOSTCOMBSC
            - TESTS_MISSING: [move_a_ghost_post], verify the comments move along.
              But how move it, automatically? Via the Ghost admin UI?

