• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

zooniverse / front-end-monorepo / 12650548709

07 Jan 2025 11:19AM UTC coverage: 77.337% (-0.01%) from 77.351%
12650548709

Pull #6216

github

web-flow
Merge f5bc17c61 into 34d968006
Pull Request #6216: feat(app-project): remember current workflow in a same-site session cookie

10739 of 16068 branches covered (66.83%)

Branch coverage included in aggregate %.

19 of 24 new or added lines in 4 files covered. (79.17%)

1 existing line in 1 file now uncovered.

16793 of 19532 relevant lines covered (85.98%)

411.03 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

85.71
/packages/app-project/stores/Project.js
1
import asyncStates from '@zooniverse/async-states'
1✔
2
import { getRoot, types } from 'mobx-state-tree'
1✔
3

4
import numberString from './types/numberString'
1✔
5
import { getCookie } from '@helpers'
13,784✔
6

7
const TranslationStrings = types.map(types.maybeNull(types.string))
1✔
8

9
const Project = types
1✔
10
  .model('Project', {
11
    about_pages: types.frozen([]),
12
    avatar: types.frozen({}),
13
    background: types.frozen({}),
14
    beta_approved: types.optional(types.boolean, false),
15
    beta_requested: types.optional(types.boolean, false),
16
    classifications_count: types.optional(types.number, 0),
17
    classifiers_count: types.optional(types.number, 0),
18
    configuration: types.frozen({}),
19
    completeness: types.optional(types.number, 0),
20
    error: types.frozen({}),
21
    experimental_tools: types.frozen([]),
22
    id: types.maybeNull(numberString),
23
    launch_approved: types.optional(types.boolean, false),
24
    links: types.maybeNull(types.frozen({})),
25
    live: types.optional(types.boolean, false),
26
    loadingState: types.optional(types.enumeration('state', asyncStates.values), asyncStates.initialized),
27
    primary_language: types.optional(types.string, 'en'),
28
    owners: types.frozen([]),
29
    retired_subjects_count: types.optional(types.number, 0),
30
    selectedWorkflow: types.optional(types.string, ''),
31
    slug: types.optional(types.string, ''),
32
    strings: TranslationStrings,
33
    subjects_count: types.optional(types.number, 0),
34
    urls: types.frozen([])
35
  })
36

37
  .views(self => ({
116✔
38
    get baseUrl() {
39
      return `/${self.slug}`
5✔
40
    },
41

42
    get defaultWorkflow() {
43
      const activeWorkflows = self.links['active_workflows']
60✔
44
      let singleActiveWorkflow
45
      if (activeWorkflows.length === 1) {
60✔
46
        [singleActiveWorkflow] = self.links['active_workflows']
56✔
47
      }
48
      return singleActiveWorkflow || self.selectedWorkflow
60✔
49
    },
50

51
    get description () {
52
      return self.strings.get('description')
3✔
53
    },
54

55
    get display_name () {
56
      return self.strings.get('display_name')
45✔
57
    },
58

59
    get displayName () {
60
      return self.display_name
2✔
61
    },
62

63
    get hasResultsPage () {
64
      return !!self.about_pages.find(page => page.url_key === 'results')
5✔
65
    },
66

67
    get introduction () {
68
      return self.strings.get('introduction')
×
69
    },
70

71
    get isComplete () {
72
      return self.completeness === 1
5✔
73
    },
74

75
    get inBeta () {
76
      return !self.launch_approved && self.beta_approved
42✔
77
    },
78

79
    get researcher_quote () {
80
      return self.strings.get('researcher_quote')
1✔
81
    },
82

83
    get title () {
84
      return self.strings.get('title')
×
85
    },
86

87
    get workflow_description () {
88
      return self.strings.get('workflow_description')
3✔
89
    },
90

91
    workflowIsActive(workflowId) {
92
      return self.links['active_workflows'].includes(workflowId)
12✔
93
    }
94
  }))
95
  .preProcessSnapshot(snapshot => {
96
    let workflowFromCookie = ''
500✔
97
    if (typeof document !== 'undefined') {
500✔
98
      workflowFromCookie = getCookie('workflow_id')
500✔
99
    }
100
    return {
500✔
101
      ...snapshot,
102
      selectedWorkflow: workflowFromCookie
103
    }
104
  })
105
  .actions(self => ({
116✔
106
    setSelectedWorkflow(workflowId) {
NEW
107
      if (typeof document !== 'undefined') {
×
NEW
108
        self.selectedWorkflow = workflowId
×
NEW
109
        document.cookie = `workflow_id=${workflowId}; path=/projects/${self.slug}; domain=zooniverse.org; SameSite=Strict`
×
110
      }
111
    }
112
  }))
1✔
113

114
export default Project
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc