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

CenterForOpenScience / ember-osf-web / 14961996214

12 May 2025 01:41AM UTC coverage: 67.409%. First build
14961996214

Pull #2560

github

web-flow
Merge a35d27536 into 542d661ce
Pull Request #2560: [ENG-7576] Linked service settings page

3249 of 5300 branches covered (61.3%)

Branch coverage included in aggregate %.

18 of 60 new or added lines in 7 files covered. (30.0%)

8499 of 12128 relevant lines covered (70.08%)

185.8 hits per line

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

53.49
/lib/osf-components/addon/components/addons-service/terms-of-service/component.ts
1
import { inject as service } from '@ember/service';
2
import Component from '@glimmer/component';
3
import IntlService from 'ember-intl/services/intl';
4

5
import { AllProviderTypes } from 'ember-osf-web/packages/addons-service/provider';
6
import { ExternalServiceCapabilities } from 'ember-osf-web/models/external-service';
7
import ExternalStorageServiceModel from 'ember-osf-web/models/external-storage-service';
8
import ExternalComputingServiceModel from 'ember-osf-web/models/external-computing-service';
9
import ExternalCitationServiceModel from 'ember-osf-web/models/external-citation-service';
10
import ExternalLinkServiceModel from 'ember-osf-web/models/external-link-service';
11

12
interface Args {
13
    provider: AllProviderTypes;
14
}
15

16
type CapabilityCategory =
17
    ExternalServiceCapabilities.ADD_UPDATE_FILES |
18
    ExternalServiceCapabilities.DELETE_FILES |
19
    ExternalServiceCapabilities.FORKING |
20
    ExternalServiceCapabilities.LOGS |
21
    ExternalServiceCapabilities.PERMISSIONS |
22
    ExternalServiceCapabilities.REGISTERING |
23
    ExternalServiceCapabilities.FILE_VERSIONS;
24

25
type ServiceTranslationKey = 'storage' | 'computing' | 'citation' | 'link';
26

27

28
const capabilitiesToLabelKeyMap: Record<CapabilityCategory, string> = {
1✔
29
    [ExternalServiceCapabilities.ADD_UPDATE_FILES]: 'addons.terms.labels.add-update-files',
30
    [ExternalServiceCapabilities.DELETE_FILES]: 'addons.terms.labels.delete-files',
31
    [ExternalServiceCapabilities.FORKING]: 'addons.terms.labels.forking',
32
    [ExternalServiceCapabilities.LOGS]: 'addons.terms.labels.logs',
33
    [ExternalServiceCapabilities.PERMISSIONS]: 'addons.terms.labels.permissions',
34
    [ExternalServiceCapabilities.REGISTERING]: 'addons.terms.labels.registering',
35
    [ExternalServiceCapabilities.FILE_VERSIONS]: 'addons.terms.labels.file-versions',
36
};
37

38
const capabilitiesToTextKeyMap: Record<ServiceTranslationKey, Partial<Record<CapabilityCategory, any>>> = {
1✔
39
    storage: {
40
        [ExternalServiceCapabilities.ADD_UPDATE_FILES]: {
41
            true: 'addons.terms.storage.add-update-files-true',
42
            false: 'addons.terms.storage.add-update-files-false',
43
            partial: 'addons.terms.storage.add-update-files-partial',
44
        },
45
        [ExternalServiceCapabilities.DELETE_FILES]: {
46
            true: 'addons.terms.storage.delete-files-true',
47
            false: 'addons.terms.storage.delete-files-false',
48
            partial: 'addons.terms.storage.delete-files-partial',
49
        },
50
        [ExternalServiceCapabilities.FORKING]: {
51
            true: 'addons.terms.storage.forking-true',
52
        },
53
        [ExternalServiceCapabilities.LOGS]: {
54
            true: 'addons.terms.storage.logs-true',
55
            false: 'addons.terms.storage.logs-false',
56
        },
57
        [ExternalServiceCapabilities.PERMISSIONS]: {
58
            true: 'addons.terms.storage.permissions-true',
59
        },
60
        [ExternalServiceCapabilities.REGISTERING]: {
61
            true: 'addons.terms.storage.registering-true',
62
        },
63
        [ExternalServiceCapabilities.FILE_VERSIONS]: {
64
            true: 'addons.terms.storage.file-versions-true',
65
            false: 'addons.terms.storage.file-versions-false',
66
        },
67
    },
68
    citation: {
69
        [ExternalServiceCapabilities.FORKING]: {
70
            partial: 'addons.terms.citation.forking-partial',
71
        },
72
        [ExternalServiceCapabilities.PERMISSIONS]: {
73
            partial: 'addons.terms.citation.permissions-partial',
74
        },
75
        [ExternalServiceCapabilities.REGISTERING]: {
76
            false: 'addons.terms.citation.registering-false',
77
        },
78
    },
79
    computing: {
80
        [ExternalServiceCapabilities.ADD_UPDATE_FILES]: {
81
            partial: 'addons.terms.computing.add-update-files-partial',
82
        },
83
        [ExternalServiceCapabilities.FORKING]: {
84
            partial: 'addons.terms.computing.forking-partial',
85
        },
86
        [ExternalServiceCapabilities.LOGS]: {
87
            partial: 'addons.terms.computing.logs-partial',
88
        },
89
        [ExternalServiceCapabilities.PERMISSIONS]: {
90
            partial: 'addons.terms.computing.permissions-partial',
91
        },
92
        [ExternalServiceCapabilities.REGISTERING]: {
93
            partial: 'addons.terms.computing.registering-partial',
94
        },
95
    },
96
    link: {
97
        [ExternalServiceCapabilities.FORKING]: {
98
            partial: 'addons.terms.computing.forking-partial',
99
        },
100
    },
101
};
102

103

104
export default class TermsOfServiceComponent extends Component<Args> {
105
    @service intl!: IntlService;
106

107
    applicableCapabilities: CapabilityCategory[] = [];
2✔
108
    baseTranslationKey!: ServiceTranslationKey;
109

110
    constructor(owner: unknown, args: Args) {
111
        super(owner, args);
2✔
112
        if (args.provider instanceof ExternalStorageServiceModel) {
2!
113
            this.applicableCapabilities = [
2✔
114
                ExternalServiceCapabilities.ADD_UPDATE_FILES,
115
                ExternalServiceCapabilities.DELETE_FILES,
116
                ExternalServiceCapabilities.FORKING,
117
                ExternalServiceCapabilities.LOGS,
118
                ExternalServiceCapabilities.PERMISSIONS,
119
                ExternalServiceCapabilities.REGISTERING,
120
                ExternalServiceCapabilities.FILE_VERSIONS,
121
            ];
122
            this.baseTranslationKey = 'storage';
2✔
123
        } else if (args.provider instanceof ExternalComputingServiceModel) {
×
124
            this.applicableCapabilities = [
×
125
                ExternalServiceCapabilities.ADD_UPDATE_FILES,
126
                ExternalServiceCapabilities.FORKING,
127
                ExternalServiceCapabilities.LOGS,
128
                ExternalServiceCapabilities.PERMISSIONS,
129
                ExternalServiceCapabilities.REGISTERING,
130
            ];
131
            this.baseTranslationKey = 'computing';
×
132
        } else if (args.provider instanceof ExternalCitationServiceModel) {
×
133
            this.applicableCapabilities = [
×
134
                ExternalServiceCapabilities.FORKING,
135
                ExternalServiceCapabilities.PERMISSIONS,
136
                ExternalServiceCapabilities.REGISTERING,
137
            ];
138
            this.baseTranslationKey = 'citation';
×
NEW
139
        } else if (args.provider instanceof ExternalLinkServiceModel) {
×
NEW
140
            this.applicableCapabilities = [
×
141
                ExternalServiceCapabilities.FORKING,
142
            ];
NEW
143
            this.baseTranslationKey = 'link';
×
144
        }
145
    }
146

147
    get sections() {
148
        const providerCapabilities = this.args.provider.supportedFeatures;
2✔
149
        const providerName = this.args.provider.displayName;
2✔
150
        return this.applicableCapabilities.map((capability: CapabilityCategory) => {
2✔
151
            const textTranslationChoices = capabilitiesToTextKeyMap[this.baseTranslationKey][capability];
14✔
152
            let textTranslationKey = textTranslationChoices.false;
14✔
153
            let localClass = 'danger-bg';
14✔
154
            if (providerCapabilities?.includes(capability)) {
14✔
155
                textTranslationKey = textTranslationChoices.true;
12✔
156
                localClass = 'success-bg';
12✔
157
            } else if (providerCapabilities?.includes((capability + '_PARTIAL' as ExternalServiceCapabilities))) {
2!
158
                textTranslationKey = textTranslationChoices.partial;
×
159
                localClass = 'warning-bg';
×
160
            }
161
            return {
14✔
162
                title: this.intl.t(capabilitiesToLabelKeyMap[capability]),
163
                text: textTranslationKey ? this.intl.t(textTranslationKey, { provider: providerName }) : undefined,
14!
164
                class: localClass,
165
            };
166
        });
167
    }
168
}
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