Browse Source

tests(ui): Project settings acceptance tests (#6979)

Billy Vong 7 years ago
parent
commit
98e24864bd

+ 2 - 2
src/sentry/static/sentry/app/components/dynamicWrapper.jsx

@@ -13,11 +13,11 @@ DynamicWrapper.propTypes = {
   /**
    * Value to display when `process.env.IS_PERCY` is truthy
    */
-  fixed: PropTypes.string.isRequired,
+  fixed: PropTypes.node.isRequired,
   /**
    * Actual value to use when not in a test environment
    */
-  value: PropTypes.string.isRequired,
+  value: PropTypes.node.isRequired,
 };
 
 export default DynamicWrapper;

+ 8 - 2
src/sentry/static/sentry/app/views/projectKeys.jsx

@@ -165,7 +165,10 @@ const KeyRow = createReactClass({
             <AutoSelectText className="form-control disabled">
               <DynamicWrapper
                 value={data.dsn.secret}
-                fixed={data.dsn.secret.replace(data.projectId, '<<projectId>>')}
+                fixed={data.dsn.secret.replace(
+                  new RegExp(`\/${data.projectId}$`),
+                  '/<<projectId>>'
+                )}
               />
             </AutoSelectText>
           </div>
@@ -175,7 +178,10 @@ const KeyRow = createReactClass({
             <AutoSelectText className="form-control disabled">
               <DynamicWrapper
                 value={data.dsn.public}
-                fixed={data.dsn.public.replace(data.projectId, '<<projectId>>')}
+                fixed={data.dsn.public.replace(
+                  new RegExp(`\/${data.projectId}$`),
+                  '/<<projectId>>'
+                )}
               />
             </AutoSelectText>
             <div className="help-block">

+ 5 - 1
src/sentry/static/sentry/app/views/projectPlugins/projectPluginRow.jsx

@@ -6,6 +6,7 @@ import {t} from '../../locale';
 import Checkbox from '../../components/checkbox';
 import ExternalLink from '../../components/externalLink';
 import SentryTypes from '../../proptypes';
+import DynamicWrapper from '../../components/dynamicWrapper';
 
 class ProjectPluginRow extends React.PureComponent {
   static propTypes = {
@@ -39,7 +40,10 @@ class ProjectPluginRow extends React.PureComponent {
           <div className={`icon-integration icon-${id}`} />
           <h5>
             {`${name} `}
-            <span>{version ? `v${version}` : <em>{t('n/a')}</em>}</span>
+            <DynamicWrapper
+              value={<span>{version ? `v${version}` : <em>{t('n/a')}</em>}</span>}
+              fixed={<span>v10</span>}
+            />
           </h5>
           <p>
             {author && <ExternalLink href={author.url}>{author.name}</ExternalLink>}

+ 19 - 3
src/sentry/static/sentry/app/views/projectReleaseTracking.jsx

@@ -5,6 +5,7 @@ import createReactClass from 'create-react-class';
 import {t, tct} from '../locale';
 import AlertActions from '../actions/alertActions';
 import ApiMixin from '../mixins/apiMixin';
+import DynamicWrapper from '../components/dynamicWrapper';
 import LoadingError from '../components/loadingError';
 import LoadingIndicator from '../components/loadingIndicator';
 import PluginList from '../components/pluginList';
@@ -176,7 +177,7 @@ const ProjectReleaseTracking = createReactClass({
               </p>
               <p>
                 <code style={{display: 'inlineBlock'}} className="auto-select">
-                  {this.state.token}
+                  <DynamicWrapper value={this.state.token} fixed="__TOKEN__" />
                 </code>
               </p>
               <p>
@@ -206,7 +207,10 @@ const ProjectReleaseTracking = createReactClass({
                 )}
               </p>
 
-              <pre className="auto-select">{this.state.webhookUrl}</pre>
+              <DynamicWrapper
+                value={<pre className="auto-select">{this.state.webhookUrl}</pre>}
+                fixed={<pre className="auto-select">__WEBHOOK_URL__</pre>}
+              />
 
               <p>
                 {t(
@@ -214,7 +218,19 @@ const ProjectReleaseTracking = createReactClass({
                 )}
               </p>
 
-              <pre className="auto-select">{this.getReleaseWebhookIntructions()}</pre>
+              <DynamicWrapper
+                value={
+                  <pre className="auto-select">{this.getReleaseWebhookIntructions()}</pre>
+                }
+                fixed={
+                  <pre className="auto-select">
+                    {`curl __WEBHOOK_URL__ \\
+  -X POST \\
+  -H 'Content-Type: application/json' \\
+  -d \'{"version": "abcdefg"}\'`}
+                  </pre>
+                }
+              />
             </form>
           </div>
         </div>

+ 33 - 0
tests/acceptance/test_project_all_integrations_settings.py

@@ -0,0 +1,33 @@
+from __future__ import absolute_import
+
+from sentry.testutils import AcceptanceTestCase
+
+
+class ProjectAllIntegrationsSettingsTest(AcceptanceTestCase):
+    def setUp(self):
+        super(ProjectAllIntegrationsSettingsTest, self).setUp()
+        self.user = self.create_user('foo@example.com')
+        self.org = self.create_organization(
+            name='Rowdy Tiger',
+            owner=None,
+        )
+        self.team = self.create_team(organization=self.org, name='Mariachi Band')
+        self.project = self.create_project(
+            organization=self.org,
+            teams=[self.team],
+            name='Bengal',
+        )
+        self.create_member(
+            user=self.user,
+            organization=self.org,
+            role='owner',
+            teams=[self.team],
+        )
+
+        self.login_as(self.user)
+
+    def test_all_integrations_list(self):
+        path = '/{}/{}/settings/plugins/'.format(self.org.slug, self.project.slug)
+        self.browser.get(path)
+        self.browser.wait_until_not('.loading-indicator')
+        self.browser.snapshot('project settings - all integrations')

+ 33 - 0
tests/acceptance/test_project_debug_symbols_settings.py

@@ -0,0 +1,33 @@
+from __future__ import absolute_import
+
+from sentry.testutils import AcceptanceTestCase
+
+
+class ProjectSavedSearchesSettingsTest(AcceptanceTestCase):
+    def setUp(self):
+        super(ProjectSavedSearchesSettingsTest, self).setUp()
+        self.user = self.create_user('foo@example.com')
+        self.org = self.create_organization(
+            name='Rowdy Tiger',
+            owner=None,
+        )
+        self.team = self.create_team(organization=self.org, name='Mariachi Band')
+        self.project = self.create_project(
+            organization=self.org,
+            teams=[self.team],
+            name='Bengal',
+        )
+        self.create_member(
+            user=self.user,
+            organization=self.org,
+            role='owner',
+            teams=[self.team],
+        )
+
+        self.login_as(self.user)
+
+    def test_saved_searches(self):
+        path = '/{}/{}/settings/debug-symbols/'.format(self.org.slug, self.project.slug)
+        self.browser.get(path)
+        self.browser.wait_until_not('.loading-indicator')
+        self.browser.snapshot('project settings - debug symbols')

+ 33 - 0
tests/acceptance/test_project_general_settings.py

@@ -0,0 +1,33 @@
+from __future__ import absolute_import
+
+from sentry.testutils import AcceptanceTestCase
+
+
+class ProjectGeneralSettingsTest(AcceptanceTestCase):
+    def setUp(self):
+        super(ProjectGeneralSettingsTest, self).setUp()
+        self.user = self.create_user('foo@example.com')
+        self.org = self.create_organization(
+            name='Rowdy Tiger',
+            owner=None,
+        )
+        self.team = self.create_team(organization=self.org, name='Mariachi Band')
+        self.project = self.create_project(
+            organization=self.org,
+            teams=[self.team],
+            name='Bengal',
+        )
+        self.create_member(
+            user=self.user,
+            organization=self.org,
+            role='owner',
+            teams=[self.team],
+        )
+
+        self.login_as(self.user)
+
+    def test_saved_searches(self):
+        path = '/{}/{}/settings/settings/'.format(self.org.slug, self.project.slug)
+        self.browser.get(path)
+        self.browser.wait_until_not('.loading-indicator')
+        self.browser.snapshot('project settings - general settings')

+ 36 - 0
tests/acceptance/test_project_release_tracking_settings.py

@@ -0,0 +1,36 @@
+from __future__ import absolute_import
+
+from sentry import tagstore
+from sentry.testutils import AcceptanceTestCase
+
+
+class ProjectReleaseTrackingSettingsTest(AcceptanceTestCase):
+    def setUp(self):
+        super(ProjectReleaseTrackingSettingsTest, self).setUp()
+        self.user = self.create_user('foo@example.com')
+        self.org = self.create_organization(
+            name='Rowdy Tiger',
+            owner=None,
+        )
+        self.team = self.create_team(organization=self.org, name='Mariachi Band')
+        self.project = self.create_project(
+            organization=self.org,
+            teams=[self.team],
+            name='Bengal',
+        )
+        self.create_member(
+            user=self.user,
+            organization=self.org,
+            role='owner',
+            teams=[self.team],
+        )
+
+        tagstore.create_tag_key(project_id=self.project.id, environment_id=None, key="Foo")
+
+        self.login_as(self.user)
+        self.path1 = '/{}/{}/settings/release-tracking/'.format(self.org.slug, self.project.slug)
+
+    def test_tags_list(self):
+        self.browser.get(self.path1)
+        self.browser.wait_until_not('.loading-indicator')
+        self.browser.snapshot('project settings - release tracking')

+ 33 - 0
tests/acceptance/test_project_saved_searches_settings.py

@@ -0,0 +1,33 @@
+from __future__ import absolute_import
+
+from sentry.testutils import AcceptanceTestCase
+
+
+class ProjectSavedSearchesSettingsTest(AcceptanceTestCase):
+    def setUp(self):
+        super(ProjectSavedSearchesSettingsTest, self).setUp()
+        self.user = self.create_user('foo@example.com')
+        self.org = self.create_organization(
+            name='Rowdy Tiger',
+            owner=None,
+        )
+        self.team = self.create_team(organization=self.org, name='Mariachi Band')
+        self.project = self.create_project(
+            organization=self.org,
+            teams=[self.team],
+            name='Bengal',
+        )
+        self.create_member(
+            user=self.user,
+            organization=self.org,
+            role='owner',
+            teams=[self.team],
+        )
+
+        self.login_as(self.user)
+
+    def test_saved_searches(self):
+        path = '/{}/{}/settings/saved-searches/'.format(self.org.slug, self.project.slug)
+        self.browser.get(path)
+        self.browser.wait_until_not('.loading-indicator')
+        self.browser.snapshot('project settings - saved searches')

+ 42 - 0
tests/acceptance/test_project_tags_settings.py

@@ -0,0 +1,42 @@
+from __future__ import absolute_import
+
+from sentry import tagstore
+from sentry.testutils import AcceptanceTestCase
+
+
+class ProjectTagsSettingsTest(AcceptanceTestCase):
+    def setUp(self):
+        super(ProjectTagsSettingsTest, self).setUp()
+        self.user = self.create_user('foo@example.com')
+        self.org = self.create_organization(
+            name='Rowdy Tiger',
+            owner=None,
+        )
+        self.team = self.create_team(organization=self.org, name='Mariachi Band')
+        self.project = self.create_project(
+            organization=self.org,
+            teams=[self.team],
+            name='Bengal',
+        )
+        self.create_member(
+            user=self.user,
+            organization=self.org,
+            role='owner',
+            teams=[self.team],
+        )
+
+        tagstore.create_tag_key(project_id=self.project.id, environment_id=None, key="Foo")
+
+        self.login_as(self.user)
+        self.path1 = '/{}/{}/settings/tags/'.format(self.org.slug, self.project.slug)
+
+    def test_tags_list(self):
+        self.browser.get(self.path1)
+        self.browser.wait_until_not('.loading-indicator')
+        self.browser.snapshot('project settings - tags')
+        self.browser.wait_until('.content tr')
+        self.browser.click('.content tr .btn')
+        self.browser.wait_until('.modal-footer .button-primary')
+        self.browser.click('.modal-footer .button-primary')
+        self.browser.wait_until_not('.content tbody tr')
+        self.browser.snapshot('project settings - tags - after remove')

Some files were not shown because too many files changed in this diff