<!-- 
RSS generated by JIRA (1001.0.0-SNAPSHOT#100246-sha1:7a5c50119eb0633d306e14180817ddef5e80c75d) at Thu Feb 08 23:12:40 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>FOLIO Jira</title>
    <link>https://folio-org.atlassian.net</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>1001.0.0-SNAPSHOT</version>
        <build-number>100246</build-number>
        <build-date>07-02-2024</build-date>
    </build-info>

<item>
            <title>[FOLIO-1344] use stripes-cli in the build and test process</title>
                <link>https://folio-org.atlassian.net/browse/FOLIO-1344</link>
                <project id="10290" key="FOLIO">FOLIO</project>
                    <description>&lt;p&gt;Document the procedure and logic for running tests via a platform rather than via a workspace.  The goal is for a developer to run tests against a local environment that most closely resembles that of CI and eliminate dependency discrepancies.  Update existing documentation, or create new if needed.&lt;/p&gt;

&lt;p&gt;Also identify automation enhancements to the CLI that would make the testing process more efficient for developers.&lt;/p&gt;

&lt;p&gt;Publish the documentation on the dev.folio.org&lt;/p&gt;</description>
                <environment></environment>
        <key id="80711">FOLIO-1344</key>
            <summary>use stripes-cli in the build and test process</summary>
                <type id="10003" iconUrl="https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium">Task</type>
                                            <priority id="10001" iconUrl="https://dev.folio.org/assets/jira-priority/jira-p2.svg">P2</priority>
                        <status id="6" iconUrl="https://folio-org.atlassian.net/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10003">Done</resolution>
                                                        <assignee accountid="5f9abc1eb45b2e007453f423">John Malconian</assignee>
                                                                <reporter accountid="557058:624212b9-5938-4e3b-84c6-8c8a8db84996">Matthew Jones</reporter>
                                    <labels>
                            <label>build-release</label>
                            <label>ci</label>
                            <label>sprint44</label>
                            <label>sprint45</label>
                            <label>sprint46</label>
                            <label>sprint47</label>
                    </labels>
                <created>Fri, 13 Jul 2018 19:30:55 +0000</created>
                <updated>Mon, 12 Nov 2018 14:24:49 +0000</updated>
                            <resolved>Thu, 27 Sep 2018 14:52:02 +0000</resolved>
                                                                        <due></due>
                            <votes>0</votes>
                                    <watches>6</watches>
                                                                <comments>
                                                            <comment id="194461" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Thu, 19 Jul 2018 21:23:35 +0000"  >&lt;p&gt;Given the current issues around testing, I propose modifying this to document a new CLI-based test procedure for both CI and dev.  It seems like the right opportunity to bring together a few things on the horizon with platform-core, ui-testing (framework-only), and likely workspaces. By having the CLI encompass as many steps as possible we can help minimize possible discrepancies.&lt;/p&gt;</comment>
                                                            <comment id="194466" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Thu, 19 Jul 2018 21:26:10 +0000"  >&lt;p&gt;At first I thought much of this could be accomplished with existing commands, and some of it can. However, during initial testing I ran into the following issues trying to overlap the workspace and CI approach with the CLI:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;b&gt;&amp;#45;&amp;#45;run&lt;/b&gt; option in the CLI is not as flexible as it is in ui-testing.  I can specify test collections from an app-context, but not apps in the platform-context.&lt;/li&gt;
	&lt;li&gt;platform-complete&apos;s postinstall script fails when run from a workspace install.  This is due to the script making assumptions with regards to the location of node_modules folder.  This may be the opportunity to replace it entirely anyway as the CLI can generate the same kind of data.&lt;/li&gt;
&lt;/ul&gt;
</comment>
                                                            <comment id="194471" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Fri, 3 Aug 2018 15:37:38 +0000"  >&lt;p&gt;Update:&lt;/p&gt;

&lt;p&gt;In drafting a proposed steps for running platform tests with Stripes-CLI, I couldn&apos;t help but draw similarities to that of running tests for an individual app.  It makes sense that the procedure for each be as close as possible.  Therefore I am drafting one set of steps to work in both cases.&lt;/p&gt;

&lt;p&gt;Two branches are available for review:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;App example: &lt;b&gt;folio-org/ui-users#FOLIO&amp;#45;1344&lt;/b&gt;&lt;/li&gt;
	&lt;li&gt;Platform example: &lt;b&gt;folio-org/platform-core#FOLIO&amp;#45;1344&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Both have a package script named &lt;b&gt;test-int&lt;/b&gt; for integration tests.  I have reserved &lt;b&gt;test&lt;/b&gt; for when unit tests are present. Please see the build/test sections of each readme.md. &lt;/p&gt;

&lt;p&gt;Prerequisites: Each requires a running Okapi instance with a valid tenant.&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;Option1%3ABuildandtestinonestep%28apporplatform%29&quot;&gt;&lt;/a&gt;Option 1: Build and test in one step (app or platform)&lt;/h3&gt;
&lt;p&gt;This is the quickest to just run tests.&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;$ yarn test-int
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;&lt;a name=&quot;Option2%3ABuildandtestintwosteps%28apporplatform%29&quot;&gt;&lt;/a&gt;Option 2: Build and test in two steps (app or platform)&lt;/h3&gt;
&lt;p&gt;Quickest for developers that already have a dev instance running.  &lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;$ yarn start
$ yarn test-int --local
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;&lt;a name=&quot;Option3%3ABuildandtestsinseparatesteps%28apporplatform%29&quot;&gt;&lt;/a&gt;Option 3: Build and tests in separate steps (app or platform)&lt;/h3&gt;
&lt;p&gt;This option performs &lt;b&gt;production&lt;/b&gt; builds and also retains build artifacts.&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;$ yarn build ./output
$ yarn stripes serve --existing-build ./output
$ yarn test-int --local
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;&lt;a name=&quot;Regressiontests%28platformonly%29&quot;&gt;&lt;/a&gt;Regression tests (platform only)&lt;/h3&gt;
&lt;p&gt;This will run both the platform&apos;s own cross-module tests as well as each of the apps sets of tests.  Replace &lt;b&gt;test-int&lt;/b&gt; with &lt;b&gt;test-regression&lt;/b&gt; in the options above.&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;$ yarn test-regression --local
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;


&lt;h3&gt;&lt;a name=&quot;Notes%3A&quot;&gt;&lt;/a&gt;Notes:&lt;/h3&gt;

&lt;p&gt;Stripes-CLI is a devDependency of the app and platform and therefore does not need to be globally installed.&lt;/p&gt;

&lt;p&gt;For any of the build-related options above, an Okapi URL and tenant ID can be provided as &lt;b&gt;&amp;#45;&amp;#45;okapi&lt;/b&gt; and &lt;b&gt;&amp;#45;&amp;#45;tenant&lt;/b&gt; options.  Alternatively, in the case of a platform, &lt;b&gt;stripes.config.js&lt;/b&gt; can also be updated with an Okapi and tenant (command line option takes precedence).&lt;/p&gt;

&lt;p&gt;The &lt;b&gt;&amp;#45;&amp;#45;local&lt;/b&gt; option is simply an alias for &quot;&amp;#45;&amp;#45;url &lt;a href=&quot;http://localhost:3000&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://localhost:3000&lt;/a&gt;&quot; or (whatever host/port is defined to run the local dev server).  When either &amp;#45;&amp;#45;local or &amp;#45;&amp;#45;url is present, the development build and serve steps are skipped.&lt;/p&gt;

&lt;p&gt;Additional ui-testing options can be passed via &lt;b&gt;&amp;#45;&amp;#45;uiTest.optionName&lt;/b&gt;, such as setting username. These can also be set via environment variables that ui-testing knows about. I wonder if for consistency, it makes sense to pass everything on the command line. &lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;$ yarn test-int --uiTest.username admin
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;One thing missing from this approach is running a platform&apos;s cross-module tests with an app build (say for the PR process).  To keep things self-contained, I am proposing that instead we run an app&apos;s own unit tests via &lt;b&gt;test&lt;/b&gt; first (when applicable) and then the app&apos;s own integration tests in isolation via &lt;b&gt;test-int&lt;/b&gt;.  For an app in isolation, build artifacts may not be necessary to maintain, meaning something like option 1 may be sufficient.&lt;/p&gt;

&lt;p&gt;I am still looking into how best to handle the ui-app PR scenario w/cross module platform tests.  I think that sort of mixed case may be worth running as a subsequent quality gate following the above app-in-isolation approach.  The advantage to the app in isolation approach as the first quality gate is simplicity and consistency in setup between dev and CI environments.&lt;/p&gt;</comment>
                                                            <comment id="194477" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Fri, 3 Aug 2018 20:30:35 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5f9abc1eb45b2e007453f423&quot; class=&quot;user-hover&quot; rel=&quot;5f9abc1eb45b2e007453f423&quot; data-account-id=&quot;5f9abc1eb45b2e007453f423&quot; accountid=&quot;5f9abc1eb45b2e007453f423&quot; rel=&quot;noreferrer&quot;&gt;John Malconian&lt;/a&gt;, when you have time, I&apos;m interested in your thoughts on the options described above.  The following branches should be in a suitable state for experimenting with:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/folio-org/ui-users/tree/FOLIO-1344&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/folio-org/ui-users/tree/FOLIO-1344&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://github.com/folio-org/platform-core/tree/FOLIO-1344&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/folio-org/platform-core/tree/FOLIO-1344&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;FYI, ui-users branch has a &lt;b&gt;.stripesclirc.json&lt;/b&gt; file defining the default okapi and tenant settings (since users, by nature doesn&apos;t have stripes.config.js).  This will take precedence over another .stripesclirc, if you have one, maintained in a higher level directory.  The .stripesclirc in general, may be a good way to consolidate many options together, rather than having some on the command line, some in environment variables, etc.&lt;/p&gt;

&lt;p&gt;Platform-core tests by now may have drifted from adjustments made to the original tests in ui-testing.  Therefore I would not expect all to pass is-is.  We can sync them up later once the procedure is looking good.&lt;/p&gt;</comment>
                                                            <comment id="194483" author="5f9abc1eb45b2e007453f423" created="Mon, 6 Aug 2018 14:40:56 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3A624212b9-5938-4e3b-84c6-8c8a8db84996&quot; class=&quot;user-hover&quot; rel=&quot;557058:624212b9-5938-4e3b-84c6-8c8a8db84996&quot; data-account-id=&quot;557058:624212b9-5938-4e3b-84c6-8c8a8db84996&quot; accountid=&quot;557058:624212b9-5938-4e3b-84c6-8c8a8db84996&quot; rel=&quot;noreferrer&quot;&gt;Matthew Jones&lt;/a&gt;  - Haven&apos;t had an opportunity to examine your test branches yet,  however, I like the whole approach you&apos;ve described above in the comments and don&apos;t for see any significant problems in terms of running in the CI.   I&apos;m a little confused by the presence of the .stripesclirc.json in the project directory.    I&apos;m assuming that the default settings will be geared toward developers and that the CI might inject its own .stripesclirc.json in place of the one that might exist in GitHub?   &lt;/p&gt;</comment>
                                                            <comment id="194487" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Mon, 6 Aug 2018 18:29:50 +0000"  >&lt;p&gt;In conversations, I have found the names &quot;test-int&quot; (integration) and &quot;test-regression&quot; to cause some confusion.  These both invoke integration/end-to-end tests that require a live back-end.  The main difference is that the former is a subset of the latter.  For example, an app&apos;s &quot;test-int&quot; tests are also run during a platform&apos;s &quot;test-regression&quot;.  We may want to consider alternatives names for clarity.&lt;/p&gt;
</comment>
                                                            <comment id="194490" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Mon, 6 Aug 2018 19:13:11 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5f9abc1eb45b2e007453f423&quot; class=&quot;user-hover&quot; rel=&quot;5f9abc1eb45b2e007453f423&quot; data-account-id=&quot;5f9abc1eb45b2e007453f423&quot; accountid=&quot;5f9abc1eb45b2e007453f423&quot; rel=&quot;noreferrer&quot;&gt;John Malconian&lt;/a&gt;  Yeah the &lt;b&gt;.stripesclirc&lt;/b&gt; in the repo was for developers.  Platforms provide such defaults via &lt;b&gt;stripes.config.js&lt;/b&gt;, but there is no equivalent in the app-context.  However, I&apos;m not too pleased about including a .stripesclirc in the repo as it could cause interference with local CLI preferences, etc.  I think what I will do is include these two defaults in the CLI itself.  Things like &quot;localhost:9130&quot; and &quot;diku&quot; are a large part of the sample documentation and vagrant boxes, so this may help in other aspects as well.&lt;/p&gt;

&lt;p&gt;I also thought about separate .stripesclirc files CI.  This might actually be a handy artifact of a Jenkins build, particularly if the .stripesclirc contained all the testing parameters used.  The idea being a developer could just copy the CI&apos;s .stripesclirc locally and run the tests with all the same values for a PR without having to set environment variables, etc.&lt;/p&gt;</comment>
                                                            <comment id="194494" author="5f9abc1eb45b2e007453f423" created="Mon, 6 Aug 2018 19:26:25 +0000"  >&lt;p&gt;Just for my own clarification,  it appears  &apos;yarn test-int&apos; without &apos;run&apos; option will run only cross-module tests.  Use the &apos;run&apos; option to run specific app/module-specific tests only in a platform context.  &lt;/p&gt;
</comment>
                                                            <comment id="194498" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Mon, 6 Aug 2018 19:45:05 +0000"  >&lt;p&gt;Yes.  The goal with &quot;test-int&quot; was to run the integration tests that come included with a given repo, be it an app or platform.  If you want to run tests for a specific app (from within a platform) you can run &quot;test-regression&quot; for all of them, or pass just one app with &amp;#45;&amp;#45;run.&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;--run users
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;However, if you&apos;re looking to just run tests for a given app, I would suggest running &quot;test-int&quot; from a clone of the app in question.  At least that&apos;s the idea to simplify the test process.&lt;/p&gt;</comment>
                                                            <comment id="194500" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Mon, 6 Aug 2018 19:47:05 +0000"  >&lt;p&gt;&lt;del&gt;FYI, I created 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;STCLI-80&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/STCLI-80&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Define okapi/tenant defaults&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium&quot; /&gt;
            STCLI-80
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
 and will omit the .stripesclirc from the ui-users branch once complete.&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;Not sure what I was thinking... The CLI already does this!  I&apos;ve removed the .stripesclirc file.&lt;/p&gt;</comment>
                                                            <comment id="194504" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Mon, 6 Aug 2018 19:54:04 +0000"  >&lt;p&gt;Also, regarding app and cross-module tests:&lt;/p&gt;

&lt;p&gt;If you decide you want to run both cross-module and an app&apos;s tests from a platform at the same time you can do this:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;yarn test-int --run WD/users
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The &quot;WD&quot; is a token representing the working directory. In the case of platform-core, this says to run the (cross module) tests in the current platform, plus the tests for users.&lt;/p&gt;</comment>
                                                            <comment id="194507" author="5f9abc1eb45b2e007453f423" created="Mon, 6 Aug 2018 20:17:48 +0000"  >&lt;blockquote&gt;
&lt;p&gt;However, if you&apos;re looking to just run tests for a given app, I would suggest running &quot;test-int&quot; from a clone of the app in question. At least that&apos;s the idea to simplify the test process.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;ok.  This makes sense.   In this case I suspect I would want to run &apos;yarn start&apos; aka &apos;stripes serve&apos; and then &lt;br/&gt;
&apos;yarn test-int&apos;.   However,  I notice something odd with this. &lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt; &apos;stripes serve --okapi http://folio-snapshot-latest.aws.indexdata.com --tenant foobar&apos;

&apos;yarn test-int --ui.Test.username diku --ui.Test.password admin --ui.Test.url http://folio-snapshot-latest.aws.indexdata.com --url  http://folio-snapshot-latest.aws.indexdata.com&apos;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I get the following output: &lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;yarn run v1.6.0
$ stripes test nightmare --ui.Test.username diku --ui.Test.password admin --ui.Test.url http://folio-snapshot-latest.aws.indexdata.com --url http://folio-snapshot-latest.aws.indexdata.com
Using URL http://folio-snapshot-latest.aws.indexdata.com
Starting Nightmare tests...
Host:          http://folio-snapshot-latest.aws.indexdata.com


  Module test: users:patron_group
    Login &amp;gt; Add new patron group &amp;gt; Assign to user &amp;gt; Try to delete patron group &amp;gt; Unassign from user &amp;gt; Try to delete again &amp;gt; Logout

      &#10003; should login as diku_admin/admin (7954ms)
          Test suite   @folio/users:2.12.3
          Live module  @folio/users:2.12.3000375 (http://folio-snapshot-latest.aws.indexdata.com)

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I wouldn&apos;t expect &apos;diku_admin&apos; to be able to successfully login because I specified &apos;foobar&apos; as the tenant.   Does &apos;stripes serve&apos; honor the tenant config? &lt;/p&gt;</comment>
                                                            <comment id="194513" author="5f9abc1eb45b2e007453f423" created="Mon, 6 Aug 2018 20:43:16 +0000"  >&lt;p&gt;The other issue here from a CI perspective is not a deal breaker,  but it&apos;s difficult for the CI to determine when to execute the next command after executing &apos;stripes serve&apos; since it has to wait until the webpack build has been completed when run in daemon mode.   That&apos;s why I&apos;ve favored separate steps in the CI for building the bundle and then serving it up,  but I don&apos;t think &apos;stripes build&apos; works in an app context.&lt;/p&gt;</comment>
                                                            <comment id="194516" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Mon, 6 Aug 2018 20:53:14 +0000"  >&lt;blockquote&gt;
&lt;p&gt; In this case I suspect I would want to run &apos;yarn start&apos; aka &apos;stripes serve&apos; and then&lt;br/&gt;
&apos;yarn test-int&apos;. &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;If you want to build, serve, and test locally, &quot;yarn test-int&quot; will do this in one go.  Only when you provide a &quot;&amp;#45;&amp;#45;url&quot; option, will it bypass the build/serve steps, pointing to the build at the &quot;&amp;#45;&amp;#45;url&quot; instead.&lt;/p&gt;

&lt;p&gt;In fact, I think this is why your foobar tenant is ignored.  Your yarn test-int line above includes a url, so your local build is not being used:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;--url http://folio-snapshot-latest.aws.indexdata.com
--ui.Test.url http://folio-snapshot-latest.aws.indexdata.com  
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; 

&lt;p&gt;Try this command instead:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;yarn test-int --okapi http://folio-snapshot-320.aws.indexdata.com:9130 --tenant foobar --ui.Test.username diku --ui.Test.password admin
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The underlying &quot;stripes test nightmare&quot; command has the same &lt;a href=&quot;https://github.com/folio-org/stripes-cli/blob/master/doc/commands.md#test-nightmare-command&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;okapi and tenant options&lt;/a&gt; available for building a bundle as &quot;stripes serve&quot;.&lt;/p&gt;</comment>
                                                            <comment id="194520" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Mon, 6 Aug 2018 21:05:19 +0000"  >&lt;blockquote&gt;
&lt;p&gt;it&apos;s difficult for the CI to determine when to execute the next command after executing &apos;stripes serve&apos;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Option 1 should take care of this, invoking the tests only after the build is finished.&lt;/p&gt;

&lt;p&gt;The catch with options 1 and 2 is that these both yield development builds (for now).  Eventually we should be able to toggle prod settings on/off during both &quot;stripes build&quot; and &quot;stripes serve&quot; (
    &lt;span class=&quot;jira-issue-macro&quot; data-jira-key=&quot;STCLI-10&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/STCLI-10&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Add CLI support for --dev and --prod options&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium&quot; /&gt;
            STCLI-10
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-complete jira-macro-single-issue-export-pdf&quot;&gt;Open&lt;/span&gt;
            &lt;/span&gt;
).  Right now the only way to generate a build with production settings is with &quot;stripes build&quot;.&lt;/p&gt;</comment>
                                                            <comment id="194523" author="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d" created="Wed, 8 Aug 2018 13:38:05 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5f9abc1eb45b2e007453f423&quot; class=&quot;user-hover&quot; rel=&quot;5f9abc1eb45b2e007453f423&quot; data-account-id=&quot;5f9abc1eb45b2e007453f423&quot; accountid=&quot;5f9abc1eb45b2e007453f423&quot; rel=&quot;noreferrer&quot;&gt;John Malconian&lt;/a&gt; will implement the changes proposed in the CI and close this when everything works ok.&lt;/p&gt;</comment>
                                                            <comment id="194526" author="5f9abc1eb45b2e007453f423" created="Wed, 8 Aug 2018 16:44:18 +0000"  >&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;However, if you&apos;re looking to just run tests for a given app, I would suggest running &quot;test-int&quot; from a clone of the app in question. At least that&apos;s the idea to simplify the test process.
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Some thoughts around this...I initially was thinking that would be &quot;cheaper&quot; and maybe more efficient to run the app-specific nightmare tests in the app context instead of the platform context in CI for PRs,  however, there is still the issue of the ensuring there is a backend tenant that was been bootstrapped with the proper modules enabled.    Plus we have identified many legitimate issues with code changes when building that code into a platform bundle.   So if building the platform with the code that is under review acts a worthwhile quality gate in CI (which I believe it to be) then I&apos;m thinking that all builds and tests in CI should be platform-based as it is currently.   This will also give us the ability to run the cross-module tests in CI as well without extra setup.  &lt;/p&gt;

&lt;p&gt;So the CI process for PRs would essentially consist of the following steps &quot;quality gates&quot;:&lt;/p&gt;

&lt;p&gt;1.  Ensure a successful &apos;yarn install&apos; of the module. &lt;br/&gt;
2.  Run Lint.&lt;br/&gt;
3.  Run unit (non-integration) tests if they exist e,g &apos;yarn test&apos;&lt;br/&gt;
4.  Build stripes platform (with configurable platform to use) with the code under review (PR only)&lt;br/&gt;
5.  Bootstrap test tenant (PR only)&lt;br/&gt;
6.  Run appropriate module tests (and maybe cross-module tests) in platform context.  e.g. &apos;yarn int-test etc...&apos; (PR only)&lt;/p&gt;

&lt;p&gt;This is roughly the same process used today.   Just some of the mechanics will be changed. &lt;/p&gt;</comment>
                                                            <comment id="194530" author="5f9abc1eb45b2e007453f423" created="Wed, 8 Aug 2018 17:28:04 +0000"  >&lt;p&gt;Additional thought regarding Step 4 above.   If a specific platform has NOT been configured for the module in the project&apos;s Jenkinsfile,  then the existing build steps in CI include building a bundle in the app context - &apos;PREFIX=/usr/local/share/.config/yarn stripes build --output=./bundle&apos;.   However, no further integration tests are run in this case currently.    We should probably continue this model just to ensure that a bundle can be built successfully even if it is not a platform build.    We could potentially take it a step further and generate a module descriptor via &apos;stripes mod descriptor --strict --full&apos; and post it to okapi,  bootstrap the backend tenant and run the module integration tests.    Essentially, this gives us the option to run module integration tests for modules that are not yet part of a platform as well as those that are although I think it is preferable from a quality perspective to test as part of a platform. &lt;/p&gt;</comment>
                                                            <comment id="194532" author="5f9abc1eb45b2e007453f423" created="Thu, 9 Aug 2018 14:01:59 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3A624212b9-5938-4e3b-84c6-8c8a8db84996&quot; class=&quot;user-hover&quot; rel=&quot;557058:624212b9-5938-4e3b-84c6-8c8a8db84996&quot; data-account-id=&quot;557058:624212b9-5938-4e3b-84c6-8c8a8db84996&quot; accountid=&quot;557058:624212b9-5938-4e3b-84c6-8c8a8db84996&quot; rel=&quot;noreferrer&quot;&gt;Matthew Jones&lt;/a&gt; Any additional thoughts on utilizing workspaces in the CI?   Or is the current approach of just cloning projects and platforms sufficient?   &lt;/p&gt;</comment>
                                                            <comment id="194536" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Thu, 9 Aug 2018 15:35:19 +0000"  >&lt;p&gt;I think workspaces could be helpful for an added level of testing. However, they don&apos;t lend themselves to a simple self-contained &quot;clone &amp;gt; install &amp;gt; test&quot; workflow.  Its not that workspace steps would be hard, its just that once we introduce a workspace, we are no longer self-contained to a single repo.&lt;/p&gt;

&lt;p&gt;Establishing a consistent baseline workflow (for both apps and platforms) that is self-contained gives us a good foundation that is the most portable across dev and CI.  In effect we should be able to get the same results from testing independent app and platform builds as we would in a workspace (or the link/alias/file methods).  Therefore I think we should prove out the simpler baseline first.  Then we can look to extend/optimize via Workspace.&lt;/p&gt;</comment>
                                                            <comment id="194540" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Thu, 9 Aug 2018 21:15:18 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5f9abc1eb45b2e007453f423&quot; class=&quot;user-hover&quot; rel=&quot;5f9abc1eb45b2e007453f423&quot; data-account-id=&quot;5f9abc1eb45b2e007453f423&quot; accountid=&quot;5f9abc1eb45b2e007453f423&quot; rel=&quot;noreferrer&quot;&gt;John Malconian&lt;/a&gt;, My apologies I completely overlooked your prior comments from yesterday when writing my reply to your question this morning.  I took &quot;current approach&quot; to refer to the one proposed in this ticket, but after re-reading, I think you probably meant the one currently in use by Jenkins.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So the CI process for PRs would essentially consist of the following steps &quot;quality gates&quot;:&lt;/p&gt;

&lt;p&gt;1. Ensure a successful &apos;yarn install&apos; of the module.&lt;br/&gt;
2. Run Lint.&lt;br/&gt;
3. Run unit (non-integration) tests if they exist e,g &apos;yarn test&apos;&lt;br/&gt;
4. Build stripes platform (with configurable platform to use) with the code under review (PR only)&lt;br/&gt;
5. Bootstrap test tenant (PR only)&lt;br/&gt;
6. Run appropriate module tests (and maybe cross-module tests) in platform context. e.g. &apos;yarn int-test etc...&apos; (PR only)&lt;/p&gt;

&lt;p&gt;This is roughly the same process used today. Just some of the mechanics will be changed. &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;To me this poses a similar issue with the workspace approach in that the test procedure is not self-contained to the repo and readily duplicated across environments due to coupling with an external platform/repo.  Could we address your concerns by breaking it apart and running the app&apos;s &quot;test-int&quot; followed by the platform&apos;s &quot;test-int&quot;?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;there is still the issue of the ensuring there is a backend tenant that was been bootstrapped with the proper modules enabled. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Either way, we need to prep a backend tenant at least once.  Can this tenant be reused across separate tests? I&apos;ll explain below...&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;we have identified many legitimate issues with code changes when building that code into a platform bundle&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I agree, we should still run these tests.  I&apos;m proposing we consider the platform to be its own independently testable job/step/gate.  Doing so may not be as efficient.  There is a second bundle built, but hopefully the more expensive backend prep can be retained.&lt;/p&gt;

&lt;p&gt;Starting with the app:&lt;/p&gt;

&lt;p&gt;1. Ensure a successful &apos;yarn install&apos; of the module.&lt;br/&gt;
2. Run Lint.&lt;br/&gt;
3. Run unit (non-integration) tests if they exist e,g &apos;yarn test&apos;&lt;br/&gt;
4. Bootstrap test tenant (PR only) &lt;b&gt;&lt;em&gt;...and retain it?&lt;/em&gt;&lt;/b&gt;&lt;br/&gt;
5. Run `yarn test-int`&lt;/p&gt;

&lt;p&gt;At this point success would promote/publish the app and kick off a platform build:&lt;/p&gt;

&lt;p&gt;1. Ensure a successful &apos;yarn install&apos; of the platform.&lt;br/&gt;
2. Run Lint.&lt;br/&gt;
3. Run unit (non-integration) tests if they exist e,g &apos;yarn test&apos;&lt;br/&gt;
4. Bootstrap test tenant (PR only) &lt;b&gt;&lt;em&gt;...can this work be retained from prior app&apos;s PR?&lt;/em&gt;&lt;/b&gt;&lt;br/&gt;
5. Run `yarn test-int`&lt;/p&gt;

&lt;p&gt;Notice these describe essentially the same routine for both apps and platforms.  In addition, the above platform routine can also be triggered independently when the platform itself changes, for example, when we add apps to the platform or modify platform&apos;s own tests.&lt;/p&gt;

&lt;p&gt;Likewise, the routine for an app is the same whether the app is part of a platform or not.  This addresses your point about needing to run integration tests for modules that are not yet part of a platform.  I believe achieving a level of consistency like this has some merit and will simplify understanding and reuse of tests in dev environments.&lt;/p&gt;

&lt;p&gt;I realize the piece missing (for now) is that an app that could break a cross-module test gets promoted/published.  We would, however, catch it shortly thereafter when the platform runs.  Is there a way for the Nexus repo to more-or-less flag an artifact as private only for Jenkins? The idea being, we make it &quot;public&quot; once the next quality gate (the platform) has been passed.&lt;/p&gt;

&lt;p&gt;I suppose in some respects, npm-folioci itself is Jenkin&apos;s own registry and this seems like a good example of something we want Jenkins to see but no one else.   When we are more frequently publishing to npm-folio (or public npm), folks shouldn&apos;t have to directly depend on npm-folioci like they do today and perhaps it could serve as such.&lt;/p&gt;</comment>
                                                            <comment id="194546" author="5f9abc1eb45b2e007453f423" created="Mon, 13 Aug 2018 13:30:02 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3A624212b9-5938-4e3b-84c6-8c8a8db84996&quot; class=&quot;user-hover&quot; rel=&quot;557058:624212b9-5938-4e3b-84c6-8c8a8db84996&quot; data-account-id=&quot;557058:624212b9-5938-4e3b-84c6-8c8a8db84996&quot; accountid=&quot;557058:624212b9-5938-4e3b-84c6-8c8a8db84996&quot; rel=&quot;noreferrer&quot;&gt;Matthew Jones&lt;/a&gt;  After some thought last week,  I think your approach above has considerable merit.   I would like to take it one step further and remove platform testing with testing a single repo.  I&apos;ve broken it down like this with &apos;&quot;stages&quot; representing the various quality gates: &lt;/p&gt;

&lt;p&gt;Stage 1: &lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Linting,  code quality, unit tests, and isolated (module) integration tests.    The emphasis here is on the individual repo or project - not &quot;the platform&quot; and, with  limited integration tests,  we still can test things like module dependency resolution,  permission checking, and so forth at this stage.      PRs will use Stage 1 as the only quality gate.  When these tests pass,  an artifact is uploaded to the CI repository.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Stage 2: &lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Platform testing.  Test the various platforms as a whole which consist of artifacts from the CI repository.   This essentially becomes the basis for &apos;folio-testing&apos;.   Somewhat different than what folio-testing is today.   Full suite integration tests and other automated integration tests that require a full environment are done at this stage.    When these tests pass,  a yarn.lock and a module list is committed to the platform repository.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Stage 3: &lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;User acceptance/release candidate testing.    A &apos;folio-snapshot&apos; environment is built from platforms that have passed Stage 2.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Stage 4:  &lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Individual modules are released to a production repository.  Platforms are possibly tagged.  Perhaps quarterly,  at least initially.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;That&apos;s sort of the simplified version of the CI/CD process as I envision it today.    There is some details that needs to be examined in more depth.   For instance,   I&apos;m thinking that the way we version UI components in the CI needs to change.    It doesn&apos;t make any sense to version a component in testing as v1.2.3000123 and then release v1.3.0.    It would make more sense for a developer to version the component in Github as something like 1.3.0-SNAPSHOT before development for that sprint or feature branch begins - similar to the process the backend Maven developers use -  The CI can then iteratively append build numbers to that i.e 1.3.0-SNAPSHOT.1 until the release is actually made for 1.3.0 or whatever.     I know that there are some limitations to how NPM dependency resolution occurs with snapshot releases,  but they may work in our favor with this model - TBD.  &lt;/p&gt;

&lt;p&gt;I know I may be expanding the scope of the original issue, however,  but I think it&apos;s worthwhile to re-evaluate everything we are doing at a higher level at this point.     Curious specifically about your thoughts on versioning.&lt;/p&gt;</comment>
                                                            <comment id="194552" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Tue, 14 Aug 2018 14:42:14 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5f9abc1eb45b2e007453f423&quot; class=&quot;user-hover&quot; rel=&quot;5f9abc1eb45b2e007453f423&quot; data-account-id=&quot;5f9abc1eb45b2e007453f423&quot; accountid=&quot;5f9abc1eb45b2e007453f423&quot; rel=&quot;noreferrer&quot;&gt;John Malconian&lt;/a&gt; This looks like a good approach. I agree that its worthwhile revisiting the process as a whole.  &lt;/p&gt;

&lt;p&gt;With that in mind, I see stage &lt;b&gt;one/two&lt;/b&gt; for &lt;b&gt;apps/platforms&lt;/b&gt; drawing a parallel with how we might want to handle and publish the &lt;b&gt;stripes-&amp;#42;/stripes-framework&lt;/b&gt; grouping of 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;STRIPES-543&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/STRIPES-543&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Consider &amp;quot;stripes-framework&amp;quot; to wrap &amp;quot;stripes-*&amp;quot; dependencies&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium&quot; /&gt;
            STRIPES-543
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
.&lt;/p&gt;

&lt;p&gt;I am very much in favor of using Semver&apos;s pre-release nomenclature for &quot;1.3.0-SNAPSHOT&quot;.  It seems the trouble in the past has been with pulling the latest version of a module when that module is pulled in as a dependency elsewhere.  However, this should be minimized with the introduction of the stripes framework.&lt;/p&gt;</comment>
                                                            <comment id="194556" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Wed, 15 Aug 2018 18:18:02 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5f9abc1eb45b2e007453f423&quot; class=&quot;user-hover&quot; rel=&quot;5f9abc1eb45b2e007453f423&quot; data-account-id=&quot;5f9abc1eb45b2e007453f423&quot; accountid=&quot;5f9abc1eb45b2e007453f423&quot; rel=&quot;noreferrer&quot;&gt;John Malconian&lt;/a&gt;, Interesting development with running tests against ui-users:&lt;/p&gt;

&lt;p&gt;When I run the following using a local folio/testing-backend vagrant box:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;$ yarn test-int --show
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I get 6 failing tests.  Some of these are due to missing permissions and an endpoint.  &lt;del&gt;Presumably this vagrant box (installed today) doesn&apos;t have them.&lt;/del&gt;  &lt;em&gt;I verified my vagrant box was in fact out of date.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;Access requires permission: users.item.get
Access requires permission: users.collection.get
No suitable module found for path /service-points-users
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Next, I ran the tests against the folio snapshot-stable UI (and Okapi):&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;$ yarn test-int --show --url http://folio-snapshot-stable.aws.indexdata.com/
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;All 32 tests pass.  Snapshot-stable is a platform build though.&lt;/p&gt;

&lt;p&gt;Taking the middle road, using my local UI build of ui-users (in the app context) and pointing to the snapshot stable Okapi:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;$ yarn test-int --show --okapi http://folio-snapshot-331.aws.indexdata.com:9130
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Only 2 tests fail in &lt;b&gt;new_proxy&lt;/b&gt;:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;1) should add a proxy for user 1
2) should delete a sponsor of user 2
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Looking into the source of these failures reveals that these &lt;b&gt;new_proxy&lt;/b&gt; tests depend on &lt;b&gt;ui-plugin-find-user&lt;/b&gt; which is not available when testing &lt;b&gt;ui-users&lt;/b&gt; in isolation.  In effect, this test is &quot;cross-module&quot; and therefore shouldn&apos;t exist inside of &lt;b&gt;ui-users&lt;/b&gt;.&lt;/p&gt;</comment>
                                                            <comment id="194562" author="5f9abc1eb45b2e007453f423" created="Wed, 15 Aug 2018 20:05:43 +0000"  >&lt;p&gt;Here are the results of running &apos;test-int&apos; in ui-users branch 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;FOLIO-1344&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/FOLIO-1344&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;use stripes-cli in the build and test process&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium&quot; /&gt;
            FOLIO-1344
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
 (with latest updates from master merged).  They are consistent with multiple runs.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;$ stripes test nightmare --uiTest.username pr_463_10_admin --uiTest.password admin --show --okapi http://folio-snapshot-latest.aws.indexdata.com:9130 --tenant pr_463_10
Waiting for webpack to build...
Listening at http://localhost:3000
webpack built bf4c4323b43d7d2e0437 in 14604ms
&#9888; &#65378;wdm&#65379;:    2157 modules

WARNING in domelementtype
  Multiple versions of domelementtype found:
    1.1.3 ./~/dom-serializer/~/domelementtype
    1.3.0 ./~/domelementtype


WARNING in isarray
  Multiple versions of isarray found:
    0.0.1 ./~/path-to-regexp/~/isarray
    1.0.0 ./~/isarray


WARNING in warning
  Multiple versions of warning found:
    3.0.0 ./~/warning
    4.0.1 ./~/react-router-dom/~/warning

Check how you can resolve duplicate packages: 
https://github.com/darrenscerri/duplicate-package-checker-webpack-plugin#resolving-duplicate-packages-in-your-bundle

Starting Nightmare tests...
Host:          http://localhost:3000
Username:      pr_463_10_admin


  Module test: users:patron_group
    Login &amp;gt; Add new patron group &amp;gt; Assign to user &amp;gt; Try to delete patron group &amp;gt; Unassign from user &amp;gt; Try to delete again &amp;gt; Logout

      &#10003; should login as pr_463_10_admin/admin (6861ms)
          Test suite   @folio/users:2.12.3
          Live module  @folio/users:2.12.3 (http://localhost:3000)
      &#10003; should open app and find version tag (594ms)
      &#10003; should create a patron group for &quot;Alumni&quot; (8541ms)
      1) should find an active user to edit
      2) should find patron group ID for &quot;alumni_363&quot;
      3) should edit user record using &quot;alumni_363&quot; group
      4) should find ID for &quot;Staff&quot; group
      5) should change patron group to &quot;Staff&quot; in user record
      &#10003; should delete &quot;alumni_363&quot; patron group (5516ms)
      &#10003; should confirm that &quot;alumni_363&quot; patron group has been deleted (1685ms)
      &#10003; should logout (108ms)

  Module test: users:new_user
    Login &amp;gt; Create new user &amp;gt; Logout &amp;gt; Login as new user &amp;gt; Logout &amp;gt; Login &amp;gt; Edit new user and confirm changes
      &#10003; should load login page (5353ms)
      &#10003; should login as pr_463_10_admin/admin (1590ms)
          Test suite   @folio/users:2.12.3
          Live module  @folio/users:2.12.3 (http://localhost:3000)
      &#10003; should open app and find version tag (745ms)
      &#10003; should extract a patron group value (5473ms)
      &#10003; should create a user: ijohnson1534362535422/ijohnson1534362535422 (5572ms)
      &#10003; should logout (759ms)
      &#10003; should login as ijohnson1534362535422/ijohnson1534362535422 (299ms)
      &#10003; should logout (592ms)
      &#10003; should login as pr_463_10_admin/admin (2329ms)
      &#10003; should change username for ijohnson1534362535422 (7205ms)
      &#10003; should logout (623ms)
      &#10003; Should login as ijohnson1534362535422x/ijohnson1534362535422 (1207ms)

  Module test: users:new_permission_set
    Login &amp;gt; Create new permission set &amp;gt; Confirm creation &amp;gt; Delete permission set &amp;gt; Confirm deletion &amp;gt; Logout

          Test suite   @folio/users:2.12.3
          Live module  @folio/users:2.12.3 (http://localhost:3000)
      &#10003; should open app and find version tag (658ms)
      6) should create a new permission set
      7) should confirm creation of new permission set
      8) should delete new permission set
      &#10003; should confirm deletion (596ms)

  Module test: users:new_proxy
    Login &amp;gt; Find user two users &amp;gt; Add proxy to user 1 &amp;gt; Delete sponsor in user 2 &amp;gt; Logout

          Test suite   @folio/users:2.12.3
          Live module  @folio/users:2.12.3 (http://localhost:3000)
      &#10003; should open app and find version tag (738ms)
      9) should get active user barcodes
      10) should add a proxy for user 1
      11) should delete a sponsor of user 2


  21 passing (3m)
  11 failing

  1) Module test: users:patron_group
       Login &amp;gt; Add new patron group &amp;gt; Assign to user &amp;gt; Try to delete patron group &amp;gt; Unassign from user &amp;gt; Try to delete again &amp;gt; Logout

         should find an active user to edit:
     Error: .wait() timed out after 30000msec
      at Timeout._onTimeout (node_modules/nightmare/lib/actions.js:453:10)

  2) Module test: users:patron_group
       Login &amp;gt; Add new patron group &amp;gt; Assign to user &amp;gt; Try to delete patron group &amp;gt; Unassign from user &amp;gt; Try to delete again &amp;gt; Logout

         should find patron group ID for &quot;alumni_363&quot;:
     Error: .wait() timed out after 30000msec
      at Timeout._onTimeout (node_modules/nightmare/lib/actions.js:453:10)

  3) Module test: users:patron_group
       Login &amp;gt; Add new patron group &amp;gt; Assign to user &amp;gt; Try to delete patron group &amp;gt; Unassign from user &amp;gt; Try to delete again &amp;gt; Logout

         should edit user record using &quot;alumni_363&quot; group:
     Error: done() invoked with non-Error: Cannot set property &apos;value&apos; of null
      at &amp;lt;anonymous&amp;gt;
      at process._tickCallback (internal/process/next_tick.js:188:7)

  4) Module test: users:patron_group
       Login &amp;gt; Add new patron group &amp;gt; Assign to user &amp;gt; Try to delete patron group &amp;gt; Unassign from user &amp;gt; Try to delete again &amp;gt; Logout

         should find ID for &quot;Staff&quot; group:
     Error: .wait() timed out after 30000msec
      at Timeout._onTimeout (node_modules/nightmare/lib/actions.js:453:10)

  5) Module test: users:patron_group
       Login &amp;gt; Add new patron group &amp;gt; Assign to user &amp;gt; Try to delete patron group &amp;gt; Unassign from user &amp;gt; Try to delete again &amp;gt; Logout

         should change patron group to &quot;Staff&quot; in user record:
     Error: done() invoked with non-Error: Cannot set property &apos;value&apos; of null
      at &amp;lt;anonymous&amp;gt;
      at process._tickCallback (internal/process/next_tick.js:188:7)

  6) Module test: users:new_permission_set
       Login &amp;gt; Create new permission set &amp;gt; Confirm creation &amp;gt; Delete permission set &amp;gt; Confirm deletion &amp;gt; Logout

         should create a new permission set:
     Error: done() invoked with non-Error: Unable to find element by selector: //button[contains(.,&quot;Check in&quot;)]
      at &amp;lt;anonymous&amp;gt;
      at process._tickCallback (internal/process/next_tick.js:188:7)

  7) Module test: users:new_permission_set
       Login &amp;gt; Create new permission set &amp;gt; Confirm creation &amp;gt; Delete permission set &amp;gt; Confirm deletion &amp;gt; Logout

         should confirm creation of new permission set:
     Error: done() invoked with non-Error: Unable to find element by selector: //a[.=&quot;Circulation employee&quot;]
      at &amp;lt;anonymous&amp;gt;
      at process._tickCallback (internal/process/next_tick.js:188:7)

  8) Module test: users:new_permission_set
       Login &amp;gt; Create new permission set &amp;gt; Confirm creation &amp;gt; Delete permission set &amp;gt; Confirm deletion &amp;gt; Logout

         should delete new permission set:
     Error: done() invoked with non-Error: Unable to find element by selector: #clickable-edit-item
      at &amp;lt;anonymous&amp;gt;
      at process._tickCallback (internal/process/next_tick.js:188:7)

  9) Module test: users:new_proxy
       Login &amp;gt; Find user two users &amp;gt; Add proxy to user 1 &amp;gt; Delete sponsor in user 2 &amp;gt; Logout

         should get active user barcodes:
     Error: .wait() timed out after 30000msec
      at Timeout._onTimeout (node_modules/nightmare/lib/actions.js:453:10)

  10) Module test: users:new_proxy
       Login &amp;gt; Find user two users &amp;gt; Add proxy to user 1 &amp;gt; Delete sponsor in user 2 &amp;gt; Logout

         should add a proxy for user 1:
     TypeError: Cannot read property &apos;barcode&apos; of undefined
      at Context.it (test/ui-testing/new_proxy.js:66:52)

  11) Module test: users:new_proxy
       Login &amp;gt; Find user two users &amp;gt; Add proxy to user 1 &amp;gt; Delete sponsor in user 2 &amp;gt; Logout

         should delete a sponsor of user 2:
     TypeError: Cannot read property &apos;barcode&apos; of undefined
      at Context.it (test/ui-testing/new_proxy.js:97:50)



Some tests failed or something went wrong while attempting to run the tests.
11
exiting process
Done in 221.07s.
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The tenant is &apos;pr_463_10&apos; on folio-snapshot-stable (8/15).    I posted the module descriptor for ui-users to okapi and enabled the module (folio_users-2.12.3-pr.463.10) along with the latest version of stripes-core on folio-snapshot-stable and mod-codex-inventory (this gets enabled always since nothing depends on it).     Using Okapi&apos;s dependency resolution,  the following modules were enabled for the tenant: &lt;/p&gt;

&lt;p&gt;jenkins@8e6da5a15783:~/ui-users$ curl -w &apos;\n&apos; &lt;a href=&quot;http://folio-snapshot-stable.aws.indexdata.com:9130/_/proxy/tenants/pr_463_10/modules&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://folio-snapshot-stable.aws.indexdata.com:9130/_/proxy/tenants/pr_463_10/modules&lt;/a&gt;&lt;br/&gt;
[ &lt;/p&gt;
{
  &quot;id&quot; : &quot;folio_stripes-core-2.10.5000325&quot;
}
&lt;p&gt;, &lt;/p&gt;
{
  &quot;id&quot; : &quot;folio_users-2.12.3-pr.463.10&quot;
}
&lt;p&gt;, &lt;/p&gt;
{
  &quot;id&quot; : &quot;mod-authtoken-1.5.1-SNAPSHOT.25&quot;
}
&lt;p&gt;, &lt;/p&gt;
{
  &quot;id&quot; : &quot;mod-circulation-11.0.1-SNAPSHOT.165&quot;
}
&lt;p&gt;, &lt;/p&gt;
{
  &quot;id&quot; : &quot;mod-circulation-storage-5.6.0-SNAPSHOT.104&quot;
}
&lt;p&gt;, &lt;/p&gt;
{
  &quot;id&quot; : &quot;mod-codex-inventory-1.2.0-SNAPSHOT.54&quot;
}
&lt;p&gt;, &lt;/p&gt;
{
  &quot;id&quot; : &quot;mod-configuration-4.0.4-SNAPSHOT.37&quot;
}
&lt;p&gt;, &lt;/p&gt;
{
  &quot;id&quot; : &quot;mod-feesfines-14.2.2-SNAPSHOT.10&quot;
}
&lt;p&gt;, &lt;/p&gt;
{
  &quot;id&quot; : &quot;mod-inventory-storage-12.5.1-SNAPSHOT.144&quot;
}
&lt;p&gt;, &lt;/p&gt;
{
  &quot;id&quot; : &quot;mod-login-4.2.1-SNAPSHOT.17&quot;
}
&lt;p&gt;, &lt;/p&gt;
{
  &quot;id&quot; : &quot;mod-permissions-5.3.2-SNAPSHOT.27&quot;
}
&lt;p&gt;, &lt;/p&gt;
{
  &quot;id&quot; : &quot;mod-users-15.1.0-SNAPSHOT.38&quot;
}
&lt;p&gt;, &lt;/p&gt;
{
  &quot;id&quot; : &quot;mod-users-bl-3.0.0-SNAPSHOT.20&quot;
}
&lt;p&gt;, &lt;/p&gt;
{
  &quot;id&quot; : &quot;okapi-2.17.0&quot;
}
&lt;p&gt; ]&lt;/p&gt;

&lt;p&gt;I suspect the absence of &apos;ui-plugin-find-user&apos; is responsible for at least some of these.   I will enable that module next and re-test. &lt;/p&gt;</comment>
                                                            <comment id="194576" author="5f9abc1eb45b2e007453f423" created="Wed, 15 Aug 2018 20:27:36 +0000"  >&lt;p&gt;Oddly enough,  I get the same 11 test failures when the find-user plugin is enabled for the tenant: &lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;[ {
  &quot;id&quot; : &quot;folio_plugin-find-user-1.1.100024&quot;
}, {
  &quot;id&quot; : &quot;folio_stripes-core-2.10.5000325&quot;
}, {
  &quot;id&quot; : &quot;folio_users-2.12.3-pr.463.10&quot;
}, {
  &quot;id&quot; : &quot;mod-authtoken-1.5.1-SNAPSHOT.25&quot;
}, {
  &quot;id&quot; : &quot;mod-circulation-11.0.1-SNAPSHOT.165&quot;
}, {
  &quot;id&quot; : &quot;mod-circulation-storage-5.6.0-SNAPSHOT.104&quot;
}, {
  &quot;id&quot; : &quot;mod-codex-inventory-1.2.0-SNAPSHOT.54&quot;
}, {
  &quot;id&quot; : &quot;mod-configuration-4.0.4-SNAPSHOT.37&quot;
}, {
  &quot;id&quot; : &quot;mod-feesfines-14.2.2-SNAPSHOT.10&quot;
}, {
  &quot;id&quot; : &quot;mod-inventory-storage-12.5.1-SNAPSHOT.144&quot;
}, {
  &quot;id&quot; : &quot;mod-login-4.2.1-SNAPSHOT.17&quot;
}, {
  &quot;id&quot; : &quot;mod-permissions-5.3.2-SNAPSHOT.27&quot;
}, {
  &quot;id&quot; : &quot;mod-users-15.1.0-SNAPSHOT.38&quot;
}, {
  &quot;id&quot; : &quot;mod-users-bl-3.0.0-SNAPSHOT.20&quot;
}, {
  &quot;id&quot; : &quot;okapi-2.17.0&quot;
} ]
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;jenkins@8e6da5a15783:~/ui-users$ xvfb-run &apos;--server-args=-screen 0 1024x768x24&apos; yarn test-int --uiTest.username pr_463_10_admin --uiTest.password admin --show --okapi http://folio-snapshot-latest.aws.indexdata.com:9130 --tenant pr_463_10
yarn run v1.9.4
$ stripes test nightmare --uiTest.username pr_463_10_admin --uiTest.password admin --show --okapi http://folio-snapshot-latest.aws.indexdata.com:9130 --tenant pr_463_10
Waiting for webpack to build...
Listening at http://localhost:3000
webpack built 2279adcf80465538f6f9 in 14594ms
&#9888; &#65378;wdm&#65379;:    2157 modules

WARNING in domelementtype
  Multiple versions of domelementtype found:
    1.1.3 ./~/dom-serializer/~/domelementtype
    1.3.0 ./~/domelementtype


WARNING in isarray
  Multiple versions of isarray found:
    0.0.1 ./~/path-to-regexp/~/isarray
    1.0.0 ./~/isarray


WARNING in warning
  Multiple versions of warning found:
    3.0.0 ./~/warning
    4.0.1 ./~/react-router-dom/~/warning

Check how you can resolve duplicate packages: 
https://github.com/darrenscerri/duplicate-package-checker-webpack-plugin#resolving-duplicate-packages-in-your-bundle

Starting Nightmare tests...
Host:          http://localhost:3000
Username:      pr_463_10_admin


  Module test: users:patron_group
    Login &amp;gt; Add new patron group &amp;gt; Assign to user &amp;gt; Try to delete patron group &amp;gt; Unassign from user &amp;gt; Try to delete again &amp;gt; Logout

      &#10003; should login as pr_463_10_admin/admin (7576ms)
          Test suite   @folio/users:2.12.3-malc
          Live module  @folio/users:2.12.3-malc (http://localhost:3000)
      &#10003; should open app and find version tag (548ms)
      &#10003; should create a patron group for &quot;Alumni&quot; (8592ms)
      1) should find an active user to edit
      2) should find patron group ID for &quot;alumni_4231&quot;
      3) should edit user record using &quot;alumni_4231&quot; group
      4) should find ID for &quot;Staff&quot; group
      5) should change patron group to &quot;Staff&quot; in user record
      &#10003; should delete &quot;alumni_4231&quot; patron group (5490ms)
      &#10003; should confirm that &quot;alumni_4231&quot; patron group has been deleted (1677ms)
      &#10003; should logout (107ms)

  Module test: users:new_user
    Login &amp;gt; Create new user &amp;gt; Logout &amp;gt; Login as new user &amp;gt; Logout &amp;gt; Login &amp;gt; Edit new user and confirm changes
      &#10003; should load login page (5165ms)
      &#10003; should login as pr_463_10_admin/admin (3235ms)
          Test suite   @folio/users:2.12.3-malc
          Live module  @folio/users:2.12.3-malc (http://localhost:3000)
      &#10003; should open app and find version tag (547ms)
      &#10003; should extract a patron group value (5373ms)
      &#10003; should create a user: nbrown1534364484173/nbrown1534364484173 (5331ms)
      &#10003; should logout (733ms)
      &#10003; should login as nbrown1534364484173/nbrown1534364484173 (302ms)
      &#10003; should logout (593ms)
      &#10003; should login as pr_463_10_admin/admin (10257ms)
      &#10003; should change username for nbrown1534364484173 (6566ms)
      &#10003; should logout (622ms)
      &#10003; Should login as nbrown1534364484173x/nbrown1534364484173 (1192ms)

  Module test: users:new_permission_set
    Login &amp;gt; Create new permission set &amp;gt; Confirm creation &amp;gt; Delete permission set &amp;gt; Confirm deletion &amp;gt; Logout

          Test suite   @folio/users:2.12.3-malc
          Live module  @folio/users:2.12.3-malc (http://localhost:3000)
      &#10003; should open app and find version tag (608ms)
      6) should create a new permission set
      7) should confirm creation of new permission set
      8) should delete new permission set
      &#10003; should confirm deletion (601ms)

  Module test: users:new_proxy
    Login &amp;gt; Find user two users &amp;gt; Add proxy to user 1 &amp;gt; Delete sponsor in user 2 &amp;gt; Logout

          Test suite   @folio/users:2.12.3-malc
          Live module  @folio/users:2.12.3-malc (http://localhost:3000)
      &#10003; should open app and find version tag (639ms)
      9) should get active user barcodes
      10) should add a proxy for user 1
      11) should delete a sponsor of user 2


  21 passing (3m)
  11 failing

  1) Module test: users:patron_group
       Login &amp;gt; Add new patron group &amp;gt; Assign to user &amp;gt; Try to delete patron group &amp;gt; Unassign from user &amp;gt; Try to delete again &amp;gt; Logout

         should find an active user to edit:
     Error: .wait() timed out after 30000msec
      at Timeout._onTimeout (node_modules/nightmare/lib/actions.js:453:10)

  2) Module test: users:patron_group
       Login &amp;gt; Add new patron group &amp;gt; Assign to user &amp;gt; Try to delete patron group &amp;gt; Unassign from user &amp;gt; Try to delete again &amp;gt; Logout

         should find patron group ID for &quot;alumni_4231&quot;:
     Error: .wait() timed out after 30000msec
      at Timeout._onTimeout (node_modules/nightmare/lib/actions.js:453:10)

  3) Module test: users:patron_group
       Login &amp;gt; Add new patron group &amp;gt; Assign to user &amp;gt; Try to delete patron group &amp;gt; Unassign from user &amp;gt; Try to delete again &amp;gt; Logout

         should edit user record using &quot;alumni_4231&quot; group:
     Error: done() invoked with non-Error: Cannot set property &apos;value&apos; of null
      at &amp;lt;anonymous&amp;gt;
      at process._tickCallback (internal/process/next_tick.js:188:7)

  4) Module test: users:patron_group
       Login &amp;gt; Add new patron group &amp;gt; Assign to user &amp;gt; Try to delete patron group &amp;gt; Unassign from user &amp;gt; Try to delete again &amp;gt; Logout

         should find ID for &quot;Staff&quot; group:
     Error: .wait() timed out after 30000msec
      at Timeout._onTimeout (node_modules/nightmare/lib/actions.js:453:10)

  5) Module test: users:patron_group
       Login &amp;gt; Add new patron group &amp;gt; Assign to user &amp;gt; Try to delete patron group &amp;gt; Unassign from user &amp;gt; Try to delete again &amp;gt; Logout

         should change patron group to &quot;Staff&quot; in user record:
     Error: done() invoked with non-Error: Cannot set property &apos;value&apos; of null
      at &amp;lt;anonymous&amp;gt;
      at process._tickCallback (internal/process/next_tick.js:188:7)

  6) Module test: users:new_permission_set
       Login &amp;gt; Create new permission set &amp;gt; Confirm creation &amp;gt; Delete permission set &amp;gt; Confirm deletion &amp;gt; Logout

         should create a new permission set:
     Error: done() invoked with non-Error: Unable to find element by selector: //button[contains(.,&quot;Check in&quot;)]
      at &amp;lt;anonymous&amp;gt;
      at process._tickCallback (internal/process/next_tick.js:188:7)

  7) Module test: users:new_permission_set
       Login &amp;gt; Create new permission set &amp;gt; Confirm creation &amp;gt; Delete permission set &amp;gt; Confirm deletion &amp;gt; Logout

         should confirm creation of new permission set:
     Error: done() invoked with non-Error: Unable to find element by selector: //a[.=&quot;Circulation employee&quot;]
      at &amp;lt;anonymous&amp;gt;
      at process._tickCallback (internal/process/next_tick.js:188:7)

  8) Module test: users:new_permission_set
       Login &amp;gt; Create new permission set &amp;gt; Confirm creation &amp;gt; Delete permission set &amp;gt; Confirm deletion &amp;gt; Logout

         should delete new permission set:
     Error: done() invoked with non-Error: Unable to find element by selector: #clickable-edit-item
      at &amp;lt;anonymous&amp;gt;
      at process._tickCallback (internal/process/next_tick.js:188:7)

  9) Module test: users:new_proxy
       Login &amp;gt; Find user two users &amp;gt; Add proxy to user 1 &amp;gt; Delete sponsor in user 2 &amp;gt; Logout

         should get active user barcodes:
     Error: .wait() timed out after 30000msec
      at Timeout._onTimeout (node_modules/nightmare/lib/actions.js:453:10)

  10) Module test: users:new_proxy
       Login &amp;gt; Find user two users &amp;gt; Add proxy to user 1 &amp;gt; Delete sponsor in user 2 &amp;gt; Logout

         should add a proxy for user 1:
     TypeError: Cannot read property &apos;barcode&apos; of undefined
      at Context.it (test/ui-testing/new_proxy.js:66:52)

  11) Module test: users:new_proxy
       Login &amp;gt; Find user two users &amp;gt; Add proxy to user 1 &amp;gt; Delete sponsor in user 2 &amp;gt; Logout

         should delete a sponsor of user 2:
     TypeError: Cannot read property &apos;barcode&apos; of undefined
      at Context.it (test/ui-testing/new_proxy.js:97:50)



Some tests failed or something went wrong while attempting to run the tests.
11
exiting process
Done in 227.20s.
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Will follow up tomorrow by testing against a wider set of tenant modules.   &lt;/p&gt;</comment>
                                                            <comment id="194587" author="5f9abc1eb45b2e007453f423" created="Wed, 15 Aug 2018 20:34:19 +0000"  >&lt;p&gt;Actually, those results should be expected.  Enabling the module for the tenant with Okapi means nothing if it is not included in the bundle.   Oversights like that mean its time to stop for the day. &lt;/p&gt;</comment>
                                                            <comment id="194589" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Wed, 15 Aug 2018 21:24:25 +0000"  >&lt;p&gt;I can confirm the same 11 failures when using tenant &lt;b&gt;pr_463_10&lt;/b&gt;.  There are only 2 failures (known, for the plugin) when running against tenant &lt;b&gt;diku&lt;/b&gt;.  This suggest to me the initial tenant data does not meet the test&apos;s expectations.&lt;/p&gt;

&lt;p&gt;The first failure occurs while looking for an active user.  When not found, this has cascading effects on subsequent tests operating on that user.  While there are active users in tenant &lt;b&gt;pr_463_10&lt;/b&gt;, the test is looking for the &lt;b&gt;11th&lt;/b&gt; user in the list.  However, this tenant only has 3 users to choose from. &lt;em&gt;(Note: There are now more users in this tenant since I&apos;ve run tests a couple of times, one of which creates a user.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In &lt;b&gt;patron_group.js&lt;/b&gt;:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
.wait(&lt;span class=&quot;code-quote&quot;&gt;&apos;#list-users div[role=&lt;span class=&quot;code-quote&quot;&gt;&quot;listitem&quot;&lt;/span&gt;]:nth-of-type(11) &amp;gt; a &amp;gt; div:nth-of-type(5)&apos;&lt;/span&gt;)
.evaluate(() =&amp;gt; document.querySelector(&lt;span class=&quot;code-quote&quot;&gt;&apos;#list-users div[role=&lt;span class=&quot;code-quote&quot;&gt;&quot;listitem&quot;&lt;/span&gt;]:nth-of-type(11) &amp;gt; a &amp;gt; div:nth-of-type(5)&apos;&lt;/span&gt;).title)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Changing both of these &lt;b&gt;:nth-of-type()&lt;/b&gt; selectors locally from &quot;11&quot; to say &quot;3&quot; allows more tests to pass, but even selecting the 3rd user seem arbitrary.  The test probably should be updated to select the first it finds, or even better, create &lt;b&gt;n&lt;/b&gt; users before looking for then &lt;b&gt;nth&lt;/b&gt; one.&lt;/p&gt;

&lt;p&gt;Correctly finding a user will allow all these failing tests to pass:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;      1) should find an active user to edit
      2) should find patron group ID for &quot;alumni_1757&quot;
      3) should edit user record using &quot;alumni_1757&quot; group
      4) should find ID for &quot;Staff&quot; group
      5) should change patron group to &quot;Staff&quot; in user record
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                                                            <comment id="194593" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Wed, 15 Aug 2018 21:59:46 +0000"  >&lt;p&gt;The next failure is also due to lack of data.  The &lt;b&gt;new_permission_set&lt;/b&gt; test is looking for existing permissions to assign to the permission set it creates.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
.xclick(&lt;span class=&quot;code-quote&quot;&gt;&apos;&lt;span class=&quot;code-comment&quot;&gt;//button[contains(.,&lt;span class=&quot;code-quote&quot;&gt;&quot;Check in&quot;&lt;/span&gt;)]&apos;&lt;/span&gt;)
&lt;/span&gt;&lt;span class=&quot;code-comment&quot;&gt;//...
&lt;/span&gt;.xclick(&lt;span class=&quot;code-quote&quot;&gt;&apos;&lt;span class=&quot;code-comment&quot;&gt;//button[contains(.,&lt;span class=&quot;code-quote&quot;&gt;&quot;Check out&quot;&lt;/span&gt;)]&apos;&lt;/span&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Tenant &lt;b&gt;diku&lt;/b&gt; has the permissions &quot;Check in: All permissions&quot; and &quot;Check out: All permissions&quot;, however, tenant &lt;b&gt;pr_463_10&lt;/b&gt; does not have these.  It only has permissions related to users and settings, which makes sense given that&apos;s what we are dealing with here.&lt;/p&gt;

&lt;p&gt;This test should be updated to select permissions pertaining only to the user&apos;s app to remove this cross-module data dependency, allowing the test to remain isolated.&lt;/p&gt;

&lt;p&gt;This fix will allow these failing tests to pass:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;      6) should create a new permission set
      7) should confirm creation of new permission set
      8) should delete new permission set
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                                                            <comment id="194596" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Wed, 15 Aug 2018 22:08:03 +0000"  >&lt;p&gt;The last failure (outside of the plugin ones) is also due to too few users.  The &lt;b&gt;new_proxy&lt;/b&gt; test is looking for the &lt;b&gt;9th&lt;/b&gt; user in the list when there aren&apos;t that many to choose from.&lt;/p&gt;

&lt;p&gt;This is like the earlier &lt;b&gt;:nth-of-type&lt;/b&gt;, but using the &lt;b&gt;:nth-child&lt;/b&gt; selector:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
.wait(&lt;span class=&quot;code-quote&quot;&gt;&apos;#list-users div[role=&lt;span class=&quot;code-quote&quot;&gt;&quot;listitem&quot;&lt;/span&gt;]:nth-child(9)&apos;&lt;/span&gt;)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;By correctly selecting a user from the list, this test will pass:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;9) should get active user barcodes
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
</comment>
                                                            <comment id="194600" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Wed, 15 Aug 2018 22:32:25 +0000"  >&lt;p&gt;In summary, we have three ui-users tests that need updating due to data selections and one cross-module test that needs to be moved to platform-core (but probably not until we are ready to make the switch in CI).  I will create appropriate UIU tickets for these in the morning.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;patron_group (update)&lt;/li&gt;
	&lt;li&gt;new_permission_set (update)&lt;/li&gt;
	&lt;li&gt;new_proxy (update)&lt;/li&gt;
	&lt;li&gt;new_proxy (move)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Unfortunately I suspect testing other apps in isolation could yield similar findings. While it is more work now, decoupling these data and cross-module dependencies should have benefits in the longer term.&lt;/p&gt;

&lt;p&gt;Also, while debugging these tests, it seems pretty clear we could benefit from an abstraction layer (or what we&apos;re calling an interactor in bigtest) over our search results. Hunting for the nth div of the nth list item to grab a barcode, for example, seems pretty fragile.&lt;/p&gt;</comment>
                                                            <comment id="194604" author="557058:624212b9-5938-4e3b-84c6-8c8a8db84996" created="Fri, 17 Aug 2018 16:17:11 +0000"  >&lt;p&gt;I created 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;UIU-604&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/UIU-604&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Address data dependencies in Nightmare tests&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium&quot; /&gt;
            UIU-604
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
 and 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;UIU-605&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/UIU-605&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Address cross-module dependency in Nightmare tests&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium&quot; /&gt;
            UIU-605
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
 to address the test dependencies that cause failures when testing ui-users in isolation with the PR tenant.&lt;/p&gt;</comment>
                                                            <comment id="194606" author="5f9abc1eb45b2e007453f423" created="Thu, 27 Sep 2018 14:52:02 +0000"  >&lt;p&gt;stripes-cli is now a devDependency of folio-testing-platform,platform-core,and plaform-complete.  It is used to build webpacks via &apos;yarn build&apos; and used to invoke local tests via &apos;yarn test&apos; in Stripes and UI modules where either local unit tests or integration tests have been implemented.  It is also used to invoke cross-platform and module tests in platform-core and platform-complete via &apos;yarn test-regression&apos; and &apos;yarn test-int&apos;.  &lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                            <outwardlinks description="blocks">
                                        <issuelink>
            <issuekey id="80752">FOLIO-1266</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                            <outwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="79533">FOLIO-1415</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="71373">STCLI-93</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="80687">FOLIO-1335</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="80691">FOLIO-1338</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="44801">UIU-604</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="44802">UIU-605</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="80853">FOLIO-1435</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="71342">STCLI-80</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="79537">FOLIO-1450</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="80802">FOLIO-1444</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="61396">STRIPES-544</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="80759">FOLIO-1370</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="71335">STCLI-76</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10000" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummarycf">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10019" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|hzyppz:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10020" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10024" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>[CHART] Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Mon, 6 Aug 2018 14:40:56 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10025" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>[CHART] Time in Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                    </customfields>
    </item>
</channel>
</rss>