Release Checklist - opengovsg/GoGovSG GitHub Wiki

Before we roll out new features and/or fixes, we need to do some regression testing to make sure the core functionality of our app is still working as intended. This page provides a template list of tests that needs to be conducted before the release.

The checks that are strike-through are either covered by end to end tests or unused.

Hint: Copy this template to your release pull request.

Before going through the tests, please clear your cookies

New Environment Variables

(Optional Section) Lists any new runtime environment variables that will be introduced in this release. Also, a gentle reminder to ensure that any new environment variables are documented in our README.md.

  • env_var: env var details

Home page

  • The landing page graphic should animate example short urls correctly
  • The landing page should have no link to search

Login page

  • OTP email should contain requestor's IP address
  • Resend OTP should send a new OTP to user, and invalidate previous OTP

User page

  • User message banner appears on top when USER_MESSAGE env var is set
  • Announcement modal appears when ANNOUNCEMENT_* env var is set
  • Banner follows scroll

QR

  • Downloaded PNG QR code should be of width 1000px and height >= 1000px
  • Downloaded SVG QR code should work
  • Scan the downloaded QR code in SVG to check that it points to the correct long url
  • Scan the downloaded QR code in PNG to check that it points to the correct long url

Directory - desktop view

  • It should redirect to the short url link when the row is clicked for active link

Directory - mobile view

  • It should redirect to the short url link when the redirect icon is clicked for active link in bottom mobile panel

Bulk upload

  • If bulk QR code is activated, in progress status bar should appear after uploading bulk file.
  • If bulk QR code is activated, in progress status bar should change to green within 2 mins after uploading bulk file.
  • Should be able to download csv, zipped png and zipped svg from success status bar
  • Downloaded csv should have all created links
  • Downloaded zipped QR code folders should have QR code files for all created links
  • Should receive email to download zipped png and zipped svg files

Deprecated tests (tests that have been automated or are no longer relevant)

Login page

  • [ ] It should respond with invalid email when email does not end with .gov.sg
  • [ ] It should not allow submission when email is invalid
  • [ ] Invalid OTP should not log the user in
  • [ ] Valid OTP should log the user in
  • [ ] After trying to enter wrong OTP 3 times, it should respond with OTP not found/expired (a new OTP must be requested)
  • [ ] Visiting /user should redirect to login page when not logged in

Sessions

  • [ ] Shows the homepage if user does not have an existing session
  • [ ] Redirects to /user if user has an existing session (ie logged in previously on the same browser)

User page

  • [ ] Ellipses are shown for very long links

URL creation

URL creation

  • [ ] The create url modal opens when the "Create link" button is clicked.
  • [ ] It should populate the short url input box on the create url modal with a random string when the refresh icon on the short url input box is pressed
  • [ ] It should show the new short url on the users’ links table when a new link is created
  • [ ] The new short url should be highlighted on the users' links table when a new link is created
  • [ ] It should prevent creation of short urls pointing to long urls hosted on blacklisted domains
  • [ ] It should show an success snackbar when a new url has been added
  • [ ] It should show an error below the file input when a file larger than 10MB is chosen
  • [ ] It should disable the submit button when a file larger than 10MB is chosen
  • [ ] It should show the short url on users' link table when a new file link is created
  • [ ] The new short url should be highlighted on the users' links table when a new file link is created
  • [ ] It should show an success snackbar when a new file link has been added
  • [ ] On link creation success, the create url modal remains open and displays isSearchable toggle and add-description fields
  • [ ] When file link is created, the modal remains open and display isSearchable toggle and add-description fields

URL Searching and Download

  • [ ] Searching on the user page search bar shows links that are relevant to the search term.
  • [ ] Toggling the link to not be searchable would hide it from search
  • [ ] Toggling the link to be searchable would allow it to be searchable
  • [ ] Clicking on the download button downloads all links currently shown in the links table as a .csv file.

Link audit

  • [ ] Changing the shortUrl state from ACTIVE to INACTIVE should be shown in Link Audit history
  • [ ] Changing the longUrl should be shown in Link Audit history

Redirection

  • [ ] It should redirect to the long url when short url is active
  • [ ] It should redirect to a 404 page when short url is inactive

Drawer, Editing and Toaster logic

  • [ ] It should redirect to the amended file immediately when the file is replaced (any caching for that short url is cleared)

Transition page

You may need to clear your cookies before testing this segment.

  • [ ] Accessing a short link with a trailing slash should not result in a broken transition page.
  • [ ] Accessing a short link for the first time shows the transition page.
  • [ ] After 6 seconds, user is redirected from the transition page to the correct destination long url.
  • [ ] A skip button is displayed immediately.
  • [ ] Visiting the same short link again does not show the transition page.

Drawer, Editing and Toaster logic

  • [ ] Drawer should open with the correct long url and state when a short url row is clicked
  • [ ] Drawer can be closed on clickaway or when the close button is clicked.
  • [ ] It should set short url active or inactive immediately when the toggle is switched (any caching for that short url is cleared)
  • [ ] It should redirect to the amended url immediately when the long url is changed (any caching for that short url is cleared)
  • [ ] It should show an error and not amend the file when a file of size >10mb is selected on replace file
  • [ ] It should show a success snackbar when long url is changed
  • [ ] It should show a success snackbar when link is transferred to another user.
  • [ ] Url is updated/saved when user enters a new url, then clicks "save"
  • [ ] Url is reverts to original when user enters a new url, then re-opens the drawer without clicking "save"
  • [ ] Error validation (red underline + helperText) appears when value in edit long url textfield is invalid
  • [ ] "Save" button is disabled (grey and unclickable) when value in edit long url textfield is invalid
  • [ ] Unsuccessful link transfers do not close the drawer.
  • [ ] Successful link transfers closes the drawer.
  • [ ] Toasters to disappear when user clicks on the X only
  • [ ] Toasters to disappear after 5sec
  • [ ] Toasters to not disappear on clickaway (i.e. to prevent premature closure when user clickaway to save url)
  • [ ] It should not allow foreign characters in the description field
  • [ ] It should allow saving of description/contact as long as one of them is changed
  • [ ] It should allow saving of a blank description or contact
  • [ ] It should not allow contact emails which are not valid *.gov.sg emails

User page - Sort & Filter

  • [ ] Clicking on the button at the end of the search input should open the sort and filter panel
  • [ ] Links should be sorted by their created time in descending order when enabling sort by Date of creation and clicking apply
  • [ ] Links should be sorted by their number of clicks in descending order when enabling sort by Most number of visits and clicking apply
  • [ ] Inactive links should be filtered out by checking only Active and clicking apply
  • [ ] Active links should be filtered out by checking only Inactive and clicking apply
  • [ ] File links should be filtered out by checking only Link and clicking apply
  • [ ] Non-file links should be filtered out by checking only File and clicking apply
  • [ ] Panel should be closed when clicking outside of it
  • [ ] Panel should be closed and links sorted by created time with no filtering after clicking on reset. All links and files should be visible.
  • [ ] Panel should be closed when apply is clicked
  • [ ] It should reset the table to page 1 when apply is clicked

Directory - filter & sort panel

  • [ ] It should show search results after the user types in a search query
  • [ ] It should change the url in the address bar after the user stops typing in the search input box
  • [ ] It should reset search result when toggle between keyword and email filter
  • [ ] It should show default search results by keyword, sort by recency, with all states, both url and file types
  • [ ] It should show search results by url when search by keyword
  • [ ] It should show search results by email when search by email
  • [ ] It should show search results in order of recency when recency sort order is chosen
  • [ ] It should show search results in order of popularity when popularity sort order is chosen
  • [ ] It should show search results by active when filter by active
  • [ ] It should show search results by inactive when filter by inactive
  • [ ] It should show search results by file when filter by file
  • [ ] It should show search results by url when filter by url
  • [ ] It should reset search result and reset filter when reset button is clicked

QR

  • [ ] PNG and SVG QR codes can be downloaded on IE11

Directory - desktop view

  • [ ] It should underline the user email when hovering on the email
  • [ ] It should copy the user's email when click on the email

Directory - mobile view

  • [ ] It should open the bottom mobile panel when row is clicked
  • [ ] It should copy the user email when user icon clicked in the bottom mobile panel

Checks that shouldn't block release even if failed

General GA events

  • GA is updated with transition-page loaded event when transition-page is rendered.
  • GA is updated with transition-page proceeded event when proceed button on transition-page is clicked.
  • GA is updated with event (home page, entering home page) when enter landing page.
  • GA is updated with event (login page, email) when enter login page to fill email.
  • GA is updated with event (login page, otp, successful) when enter login page to fill otp and enter the correct otp.
  • GA is updated with event (login page, otp, unsuccessful) when enter login page to fill otp and enter the incorrect otp.
  • GA is updated with event (user page, main) when enter user page.
  • GA is updated with event (user page, open link creation modal) upon clicking on create link button.
  • GA is updated with event (modal page, click file tab) upon clicking on file tab in create link modal.
  • GA is updated with event (modal page, click url tab) upon clicking on url tab in create link modal or opening create link modal.
  • GA is updated with event (modal page, create link from url, successful) when successfully create link with url.
  • GA is updated with event (modal page, create link from url, unsuccessful) when fail to create link with url e.g. enter bit.ly .
  • GA is updated with event (modal page, create link from file, successful) when successfully create link with file.
  • GA is updated with event (modal page, create link from file, unsuccessful) when fail to create link with file e.g. upload zip file .
  • GA is updated with event (drawer page analytics data, device) when open/view device tab analytics in drawer.
  • GA is updated with event (drawer page analytics data, clicks) when open/view clicks tab analytics in drawer.
  • GA is updated with event (drawer page analytics data, traffic) when open/view traffic tab analytics in drawer.
  • GA is updated with event (qr code generation, image type, successful) when successfully generate qr code in drawer.
  • GA is updated with event (user page, download links button, successful) when successfully download links csv.
  • GA is updated with event (transfer link ownership, successful) when successfully transfer ownership.
  • GA is updated with event (transfer link ownership, unsuccessful) when fail to transfer ownership e.g. write own email.
  • GA is updated with event (announcement page, announcement title) when click on announcement button.
  • GA is updated with event (directory page, queries, successful, result count) when searching on directory.
  • GA is updated with event (directory result, queries, open tab, result rank) when clicking on result.
  • GA is updated with event (directory result, queries, copy email, result rank) when copying email.
  • Url statistics are updated when a link is clicked (daily_stats, devices_stats, weekday_stats).

Logging from GA PageView/Content

  • GA is updated with PageView (HOME PAGE) when enter home page.
  • GA is updated with PageView (EMAIL LOGIN PAGE) when enter login page to enter email.
  • GA is updated with PageView (OTP LOGIN PAGE) when enter login page to enter otp.
  • GA is updated with PageView (USER PAGE) when enter user page.
  • GA is updated with PageView (DEVICE PAGE) when enter open device analytics on drawer.
  • GA is updated with PageView (CLICKS PAGE) when enter open clicks analytics on drawer.
  • GA is updated with PageView (TRAFFIC PAGE) when enter open traffic analytics on drawer.
  • GA is updated with PageView (CREATE LINK PAGE) when open create link modal.
  • On google analytics, a page view should be recorded for a successful redirection - Page Path: short url , Page Title: long url (Reports > Realtime > Content > Pageviews)

Logging from Sentry IO

  • Sentry is updated with event (submit otp unsuccessful) when enter incorrect otp.
  • Sentry is updated with event (create link with url unsuccessful) when fail to create link with url e.g. enter bit.ly.
  • Sentry is updated with event (create link with file unsuccessful) when fail to create link with file e.g. update zip file.
  • Sentry is updated with event (transfer ownership unsuccessful) when fail to transfer link ownership e.g. write own email.