plum-e2e 2.4.3 → 2.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- @suite-login
1
+ @TS-001
2
2
  Feature: Demo Sauce Login
3
3
 
4
4
  # Background runs before every scenario in this file
@@ -6,14 +6,14 @@ Feature: Demo Sauce Login
6
6
  Given I am in Demo Sauce Login page
7
7
 
8
8
  # ── Basic Scenario ─────────────────────────────────────────────────────────
9
- @test-1
9
+ @TC-001
10
10
  Scenario: User can log in with valid credentials
11
11
  When I enter "standard_user" in username field
12
12
  And I enter "secret_sauce" in password field
13
13
  And I click on the login button
14
14
  Then I should be navigated to the products page
15
15
 
16
- @test-2
16
+ @TC-002
17
17
  Scenario: User cannot log in with invalid credentials
18
18
  When I enter "invalid_user" in username field
19
19
  And I enter "invalid_password" in password field
@@ -23,7 +23,7 @@ Feature: Demo Sauce Login
23
23
  # ── Scenario Outline ───────────────────────────────────────────────────────
24
24
  # Runs once per row in the Examples table.
25
25
  # Use <placeholder> in steps to reference column headers.
26
- @test-3
26
+ @TC-003
27
27
  Scenario Outline: User login attempts with different credentials
28
28
  When I enter "<username>" in username field
29
29
  And I enter "<password>" in password field
@@ -39,7 +39,7 @@ Feature: Demo Sauce Login
39
39
  # ── Data Table ─────────────────────────────────────────────────────────────
40
40
  # Pass structured data directly into a step.
41
41
  # Access rows in your step definition via dataTable.hashes().
42
- @test-4
42
+ @TC-004
43
43
  Scenario: User can log in using a data table
44
44
  When I fill in the login form:
45
45
  | field | value |
@@ -25,6 +25,8 @@ const path = require('path');
25
25
  const { authGuard } = require('../middleware/auth');
26
26
  const { TRIGGER_REMOTE } = require('../constants/triggers');
27
27
 
28
+ const BACKEND_DIR = path.resolve(__dirname, '..');
29
+
28
30
  // In-memory job store for active remote executions.
29
31
  // Jobs are purged after 10 minutes post-completion.
30
32
  const jobs = {};
@@ -84,7 +86,7 @@ router.post('/execute', authGuard, (req, res) => {
84
86
  };
85
87
  if (workers > 1) env.PARALLEL = String(workers);
86
88
 
87
- const proc = spawn('npm', ['run', 'test'], { env, shell: true });
89
+ const proc = spawn('npm', ['run', 'test'], { env, shell: true, cwd: BACKEND_DIR });
88
90
  proc.stdout.on('data', (d) => {
89
91
  jobs[jobId].logs += d.toString();
90
92
  });
@@ -15,8 +15,24 @@
15
15
  * along with Plum. If not, see https://www.gnu.org/licenses/.
16
16
  */
17
17
 
18
+ const fs = require('fs');
19
+ const path = require('path');
18
20
  const prisma = require('./prisma');
19
21
 
22
+ const FEATURES_DIR = path.join(__dirname, '../tests/features');
23
+
24
+ function isTaggedInFeatures(displayId) {
25
+ try {
26
+ const tag = `@${displayId}`;
27
+ return fs
28
+ .readdirSync(FEATURES_DIR)
29
+ .filter((f) => f.endsWith('.feature'))
30
+ .some((f) => fs.readFileSync(path.join(FEATURES_DIR, f), 'utf8').includes(tag));
31
+ } catch {
32
+ return false;
33
+ }
34
+ }
35
+
20
36
  const caseSelect = {
21
37
  id: true,
22
38
  displayId: true,
@@ -75,7 +91,8 @@ async function create({ suiteId, title, description, priority, createdById }) {
75
91
  title,
76
92
  description: description ?? '',
77
93
  priority: priority ?? 'Medium',
78
- createdById
94
+ createdById,
95
+ isAutomated: isTaggedInFeatures(displayId)
79
96
  },
80
97
  select: caseSelect
81
98
  });
@@ -578,16 +578,33 @@
578
578
  2
579
579
  );
580
580
 
581
- $: navItems = [
582
- { id: 'project', label: 'Project' },
583
- { id: 'runners', label: 'Runners' },
584
- { id: 'repository', label: 'Repository' },
585
- { id: 'integrations', label: 'Integrations' },
586
- { id: 'mcp', label: 'MCP' },
587
- { id: 'account', label: 'Account' },
588
- ...($auth.user?.role === 'admin' ? [{ id: 'users', label: 'Users' }] : []),
589
- { id: 'backup', label: 'Backup' }
590
- ];
581
+ const ADMIN_SECTIONS = new Set([
582
+ 'project',
583
+ 'runners',
584
+ 'repository',
585
+ 'integrations',
586
+ 'mcp',
587
+ 'users',
588
+ 'backup'
589
+ ]);
590
+
591
+ $: if ($auth.user && $auth.user.role !== 'admin' && ADMIN_SECTIONS.has(section)) {
592
+ section = 'account';
593
+ }
594
+
595
+ $: navItems =
596
+ $auth.user?.role === 'admin'
597
+ ? [
598
+ { id: 'project', label: 'Project' },
599
+ { id: 'runners', label: 'Runners' },
600
+ { id: 'repository', label: 'Repository' },
601
+ { id: 'integrations', label: 'Integrations' },
602
+ { id: 'mcp', label: 'MCP' },
603
+ { id: 'account', label: 'Account' },
604
+ { id: 'users', label: 'Users' },
605
+ { id: 'backup', label: 'Backup' }
606
+ ]
607
+ : [{ id: 'account', label: 'Account' }];
591
608
  </script>
592
609
 
593
610
  <svelte:head><title>Settings — Plum</title></svelte:head>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plum-e2e",
3
- "version": "2.4.3",
3
+ "version": "2.4.4",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/silverlunah/plum.git"