Compare commits

...

17 Commits

Author SHA1 Message Date
Leangseu Kim
c644da3dcc fix: decodeURIComponent for locationId
Squashed commit of the following:

commit af4d469ef241a504112dceda2cb94bff24ba4a9c
Author: Vu Nguyen <vu.nguyen@dmttek.com>
Date:   Wed Oct 4 11:27:58 2023 +0700

    update test cases

commit d0c28fb99bede979fbcc8f57036ecb8027996772
Merge: 1f4d50b 5492520
Author: vunguyen-dmt <34919039+vunguyen-dmt@users.noreply.github.com>
Date:   Wed Oct 4 11:22:24 2023 +0700

    Merge branch 'openedx:master' into fix_location_id_error

commit 1f4d50b36514a6e4e9e575b938bf93b81317a21c
Merge: a280a35 eb73457
Author: Vu Nguyen <vu.nguyen@dmttek.com>
Date:   Fri Jul 21 03:45:05 2023 +0700

    Merge branch 'fix_location_id_error' of https://github.com/vunguyen-dmt/frontend-app-ora-grading into fix_location_id_error

commit a280a350fcf595dd2011018d113467a9cd88cd61
Author: Vu Nguyen <vu.nguyen@dmttek.com>
Date:   Fri Jul 21 03:44:28 2023 +0700

    fix: decodeURIComponent for locationId

commit eb734574bd0daae0c2523904763a8d755baa31f3
Author: Vu Nguyen <vu.nguyen@dmttek.com>
Date:   Fri Jul 21 03:41:28 2023 +0700

    update src/data/constants/app.test.js

commit 513dd324a5adc7312ac92c30164e0120784acd4b
Merge: e899846 78ada8c
Author: vunguyen-dmt <34919039+vunguyen-dmt@users.noreply.github.com>
Date:   Wed Jul 19 16:12:14 2023 +0700

    Merge branch 'master' into fix_location_id_error

commit e8998461de8ba9cbbe00a1726ad6266bde5d5ef5
Author: Vu Nguyen <vu.nguyen@dmttek.com>
Date:   Thu Jun 8 10:29:45 2023 +0700

    fix: decodeURIComponent for locationId
2023-10-10 11:30:26 -04:00
Illia Shestakov
cc11ce0f81 fix(deps): replace edx.org brand dependency with openedx brand (#199) 2023-10-10 10:48:33 -04:00
Jenkins
549252038f chore(i18n): update translations 2023-10-01 11:51:20 -04:00
Jenkins
192c8b4601 chore(i18n): update translations 2023-09-24 11:51:22 -04:00
Jhon Vente
70e13eccfa [DOCS] Readme updated according OEP-55 (#194)
* docs: README updated

* docs: update some badges and content

* fix: getting help url

---------

Co-authored-by: Edward Zarecor <ezarecor@tcril.org>
Co-authored-by: Matthew Carter <mcarter@edx.org>
2023-09-12 13:01:10 -04:00
Emad Rad
e25a5a9549 Persian language (#246)
* fix: corrected typos

explaination -> explanation
Critera -> Criteria
addtional -> additional
arbitary -> arbitrary
penging -> pending
downladFiles -> downloadFiles
isLoadeed -> isLoaded
selectror -> selector
commnents -> comments
stirng -> string
isGragrding -> isGrading
queu -> queue
seleted -> selected
feecback -> feedback

* feat: Persian language (fa_IR) added

* chore: Persian translations added

* chore: sort language codes alphabetically

* chore: camelCase variable used for translated messages

* chore: deprecated styling updated

---------

Co-authored-by: Leangseu Kim <lkim@edx.org>
2023-09-11 09:15:52 -04:00
renovate[bot]
358263de3c fix(deps): update dependency regenerator-runtime to ^0.14.0 2023-09-05 11:35:20 -04:00
renovate[bot]
dc7fc94ab5 fix(deps): update dependency core-js to v3.32.1 2023-09-05 10:29:35 -04:00
renovate[bot]
b643afd1b8 fix(deps): update dependency @edx/frontend-component-header to v4.6.0 2023-09-05 05:30:04 -04:00
renovate[bot]
5ac1868d30 fix(deps): update dependency @edx/frontend-component-footer to v12.2.1 2023-09-05 03:35:52 -04:00
renovate[bot]
65063df731 chore(deps): update dependency node to 18.17 2023-09-05 00:55:32 -04:00
renovate[bot]
9aee97dccb fix(deps): update dependency whatwg-fetch to v3.6.18 2023-09-04 20:24:14 -04:00
renovate[bot]
be1ce502c8 fix(deps): update dependency @zip.js/zip.js to v2.7.28 2023-09-04 18:32:59 -04:00
renovate[bot]
19e2f35522 fix(deps): update dependency @edx/frontend-platform to v4.6.1 2023-09-04 14:25:59 -04:00
renovate[bot]
d24ab3358b chore(deps): update dependency jest to v29.6.4 2023-09-04 12:18:38 -04:00
renovate[bot]
56803fb874 chore(deps): update dependency @edx/frontend-build to v12.9.10 2023-09-04 09:43:58 -04:00
Bilal Qamar
b7b94531aa feat: update react & react-dom to v17 (#190)
* feat: update react & react-dom to v17

* build: update pkgs

* fix: fix lint issue

* build: update paragon

* refactor: updated edx packages

* build: update -react-redux

* refactor: updated package-lock

* refactor: updated package-lock

* refactor: updated package-lock

---------

Co-authored-by: mashal-m <mashal.malik@arbisoft.com>
Co-authored-by: Mashal Malik <107556986+Mashal-m@users.noreply.github.com>
2023-08-28 10:36:11 -04:00
49 changed files with 6768 additions and 7405 deletions

2
.nvmrc
View File

@@ -1 +1 @@
18.16
18.17

View File

@@ -3,7 +3,7 @@ npm-install-%: ## install specified % npm package
git add package.json
transifex_resource = frontend-app-ora-grading
transifex_langs = "ar,fr,es_419,zh_CN,fr_CA,it_IT,pt_PT,de_DE,uk,ru,hi"
transifex_langs = "ar,de_DE,es_419,fa_IR,fr,fr_CA,hi,it_IT,pt_PT,uk,ru,zh_CN"
intl_imports = ./node_modules/.bin/intl-imports.js
transifex_utils = ./node_modules/.bin/transifex-utils.js

View File

@@ -1,7 +1,8 @@
frontend-app-ora-grading
########################
#############################
|license-badge| |status-badge| |ci-badge| |codecov-badge|
|ci-badge| |codecov-badge| |doc-badge| |license-badge| |status-badge|
Purpose
*******
@@ -22,25 +23,56 @@ app in ``edx-platform``.
Getting Started
***************
Prerequisites
=============
The `devstack`_ is currently recommended as a development environment for your
new MFE. If you start it with ``make dev.up.lms`` that should give you
everything you need as a companion to this frontend.
Note that it is also possible to use `Tutor`_ to develop an MFE. You can refer
to the `relevant tutor-mfe documentation`_ to get started using it.
.. _Devstack: https://github.com/openedx/devstack
.. _Tutor: https://github.com/overhangio/tutor
.. _relevant tutor-mfe documentation: https://github.com/overhangio/tutor-mfe#mfe-development
Developing
==========
One Time Setup
Cloning and Startup
--------------
First, clone the repo, install code prerequisites, and start the app.
.. code-block::
# Clone the repository
git clone git@github.com:openedx/frontend-app-ora-grading.git
cd frontend-app-ora-grading
# Install prerequisites
npm install
1. Clone your new repo:
# Start the MFE
npm run start
``git clone git@github.com:openedx/frontend-app-ora-grading.git``
2. Use node v18.x.
The current version of the micro-frontend build scripts support node 18.
Using other major versions of node *may* work, but this is unsupported. For
convenience, this repository includes an .nvmrc file to help in setting the
correct node version via `nvm <https://github.com/nvm-sh/nvm>`_.
3. Install npm dependencies:
``cd frontend-app-ora-grading && npm install``
4. Update the application port to use for local development:
Default port is 1993. If this does not work for you, update the line
`PORT=1993` to your port in all .env.* files
5. Start the dev server:
``npm start``
The app will, by default, run on `http://localhost:1993` unless otherwise
specified in ``.env.development:PORT`` and ``.env.development:BASE_URL``.
@@ -112,24 +144,24 @@ the `MFE production deployment guide`_
.. _MFE production deployment guide: https://openedx.github.io/frontend-platform/#production-deployment-strategy
Internationalization
====================
Please see refer to the `frontend-platform i18n howto`_ for documentation on
internationalization.
.. _frontend-platform i18n howto: https://github.com/openedx/frontend-platform/blob/master/docs/how_tos/i18n.rst
Getting Help
************
Documentation
=============
See `ORA Staff Grading on ReadTheDocs`_ for more in-depth usage information.
.. _ORA Staff Grading on ReadTheDocs: https://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/open_response_assessments/ORA_Staff_Grading.html#ora-staff-grading
More Help
=========
If you're having trouble, we have discussion forums at
https://discuss.openedx.org where you can connect with others in the community.
Our real-time conversations are on Slack. You can request a `Slack
invitation`_, then join our `community Slack workspace`_.
invitation`_, then join our `community Slack workspace`_. Because this is a
frontend repository, the best place to discuss it would be in the `#wg-frontend
channel`_.
For anything non-trivial, the best path is to open an issue in this repository
with as many details about the issue you are facing as you can provide.
@@ -140,27 +172,30 @@ For more information about these options, see the `Getting Help`_ page.
.. _Slack invitation: https://openedx.org/slack
.. _community Slack workspace: https://openedx.slack.com/
.. _Getting Help: https://openedx.org/getting-help
.. _#wg-frontend channel: https://openedx.slack.com/archives/C04BM6YC7A6
.. _Getting Help: https://openedx.org/community/connect
License
*******
The code in this repository is licensed under the GNU Affero General Public
License v3.0 unless otherwise noted.
The code in this repository is licensed under the AGPLv3 unless otherwise
noted.
Please see `LICENSE <LICENSE>`_ for details.
Contributing
************
This project is currently only accepting bug fixes, security fixes, and
maintenance work. New features should be discussed in advance with the owning
team and added to the public roadmap or they may not be accepted. You can start
a conversation by creating a new issue on this repo summarizing your feature
idea.
Contributions are very welcome. Please read `How To Contribute`_ for details.
Please read `How To Contribute <https://openedx.org/r/how-to-contribute>`_ for
details.
.. _How To Contribute: https://openedx.org/r/how-to-contribute
This project is currently accepting all types of contributions, bug fixes,
security fixes, maintenance work, or new features. However, please make sure
to have a discussion about your new feature idea with the maintainers prior to
beginning development to maximize the chances of your change being accepted.
You can start a conversation by creating a new issue on this repo summarizing
your idea.
The Open edX Code of Conduct
****************************
@@ -181,22 +216,18 @@ file in this repo.
Reporting Security Issues
*************************
Please do not report security issues in public. Please email security@openedx.org.
.. |ci-badge| image:: https://github.com/openedx/frontend-app-ora-grading/actions/workflows/ci.yml/badge.svg
:target: https://github.com/openedx/frontend-app-ora-grading/actions/workflows/ci.yml
:alt: CI
.. |codecov-badge| image:: https://codecov.io/github/openedx/frontend-app-ora-grading/coverage.svg?branch=master
:target: https://codecov.io/github/openedx/frontend-app-ora-grading?branch=master
:alt: Codecov
.. |doc-badge| image:: https://readthedocs.org/projects/frontend-app-ora-grading/badge/?version=latest
:target: https://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/open_response_assessments/ORA_Staff_Grading.html
:alt: Documentation
Please do not report security issues in public, and email security@openedx.org instead.
.. |license-badge| image:: https://img.shields.io/github/license/openedx/frontend-app-ora-grading.svg
:target: https://github.com/openedx/frontend-app-ora-grading/blob/master/LICENSE
:alt: License
.. |status-badge| image:: https://img.shields.io/badge/Status-Maintained-brightgreen
.. |ci-badge| image:: https://github.com/openedx/frontend-app-ora-grading/actions/workflows/ci.yml/badge.svg
:target: https://github.com/openedx/frontend-app-ora-grading/actions/workflows/ci.yml
:alt: Continuous Integration
.. |codecov-badge| image:: https://codecov.io/github/openedx/frontend-app-ora-grading/coverage.svg?branch=master
:target: https://codecov.io/github/openedx/frontend-app-ora-grading?branch=master
:alt: Codecov

View File

@@ -26,4 +26,3 @@ There are only two requirements for a good `make target` name
What `make validate-no-uncommitted-package-lock-changes` does is `git diff`s for any `package-lock.json` file changes in your project.
This is important because `npm` uses the pinned dependencies in your `package-lock.json` file to build the `node_modules` directory. However, the dependencies defined within the `package.json` file can be modified manually, for example, to become misaligned with the dependencies defined within the `package-lock.json`. So when `npm install` executes, the `package-lock.json` file will be updated to mirror the modified `package.json` changes.

13699
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -24,11 +24,11 @@
"access": "public"
},
"dependencies": {
"@edx/brand": "npm:@edx/brand-edx.org@^2.0.3",
"@edx/frontend-component-footer": "^12.0.0",
"@edx/frontend-component-header": "^4.2.2",
"@edx/frontend-platform": "^4.1.0",
"@edx/paragon": "^20.30.0",
"@edx/brand": "npm:@edx/brand-openedx@^1.2.0",
"@edx/frontend-component-footer": "12.2.1",
"@edx/frontend-component-header": "4.6.0",
"@edx/frontend-platform": "4.6.1",
"@edx/paragon": "^20.44.0",
"@fortawesome/fontawesome-svg-core": "^1.2.36",
"@fortawesome/free-brands-svg-icons": "^5.15.4",
"@fortawesome/free-solid-svg-icons": "^5.15.4",
@@ -39,7 +39,7 @@
"@zip.js/zip.js": "^2.4.6",
"axios": "^0.27.0",
"classnames": "^2.3.1",
"core-js": "3.31.1",
"core-js": "3.32.1",
"dompurify": "^2.3.1",
"email-prop-type": "^3.0.1",
"enzyme": "^3.11.0",
@@ -53,12 +53,12 @@
"moment": "^2.29.3",
"prop-types": "15.8.1",
"query-string": "7.1.3",
"react": "^16.14.0",
"react-dom": "^16.14.0",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-helmet": "^6.1.0",
"react-intl": "^5.20.9",
"react-pdf": "^5.5.0",
"react-redux": "^7.2.4",
"react-redux": "^7.2.9",
"react-router": "5.3.4",
"react-router-dom": "5.3.4",
"react-router-redux": "^5.0.0-alpha.9",
@@ -67,7 +67,7 @@
"redux-devtools-extension": "2.13.9",
"redux-logger": "3.0.6",
"redux-thunk": "2.4.2",
"regenerator-runtime": "^0.13.9",
"regenerator-runtime": "^0.14.0",
"reselect": "^4.0.0",
"util": "^0.12.4",
"whatwg-fetch": "^3.6.2"
@@ -77,16 +77,16 @@
"@edx/frontend-build": "^12.7.0",
"@edx/reactifex": "^2.1.1",
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^12.1.5",
"@testing-library/react": "12.1.5",
"@wojtekmaj/enzyme-adapter-react-17": "0.8.0",
"axios-mock-adapter": "^1.20.0",
"enzyme-adapter-react-16": "^1.15.6",
"fetch-mock": "^9.11.0",
"husky": "^7.0.0",
"identity-obj-proxy": "^3.0.0",
"jest": "29.6.1",
"jest": "29.6.4",
"jest-expect-message": "^1.0.2",
"react-dev-utils": "^12.0.1",
"react-test-renderer": "^16.14.0",
"react-test-renderer": "^17.0.2",
"reactifex": "1.1.1",
"redux-mock-store": "^1.5.4",
"semantic-release": "^19.0.3"

View File

@@ -28,6 +28,6 @@
@include media-breakpoint-down(sm) {
.file-card-title {
width: map-get($container-max-widths, "sm")/2;
width: calc(map-get($container-max-widths, "sm")/2);
}
}

View File

@@ -163,7 +163,7 @@ describe('Criterion Feedback', () => {
});
describe('mapStateToProps', () => {
const testState = { abitaryState: 'some data' };
const testState = { arbitraryState: 'some data' };
const ownProps = { orderNum: props.orderNum };
let mapped;
beforeEach(() => {

View File

@@ -40,14 +40,14 @@ describe('Radio Criterion Container', () => {
feedback: 'feedback mock',
options: [
{
explanation: 'explaination',
explanation: 'explanation',
feedback: 'option feedback',
label: 'this label',
name: 'option name',
points: 1,
},
{
explanation: 'explaination 2',
explanation: 'explanation 2',
feedback: 'option feedback 2',
label: 'this label 2',
name: 'option name 2',
@@ -129,7 +129,7 @@ describe('Radio Criterion Container', () => {
});
describe('mapStateToProps', () => {
const testState = { arbitary: 'some data' };
const testState = { arbitrary: 'some data' };
const ownProps = { orderNum: props.orderNum };
let mapped;
beforeEach(() => {

View File

@@ -29,14 +29,14 @@ describe('Review Crition Container', () => {
feedback: 'feedback mock',
options: [
{
explanation: 'explaination',
explanation: 'explanation',
feedback: 'option feedback',
label: 'this label',
name: 'option name',
points: 1,
},
{
explanation: 'explaination 2',
explanation: 'explanation 2',
feedback: 'option feedback 2',
label: 'this label 2',
name: 'option name 2',
@@ -78,7 +78,7 @@ describe('Review Crition Container', () => {
});
describe('mapStateToProps', () => {
const testState = { arbitary: 'some data' };
const testState = { arbitrary: 'some data' };
const ownProps = { orderNum: props.orderNum };
let mapped;
beforeEach(() => {

View File

@@ -19,7 +19,7 @@ exports[`Criterion Container snapshot is graded and is not grading 1`] = `
this label
</strong>
<br />
explaination
explanation
</div>
<div
className="help-popover-option"
@@ -29,7 +29,7 @@ exports[`Criterion Container snapshot is graded and is not grading 1`] = `
this label 2
</strong>
<br />
explaination 2
explanation 2
</div>
</InfoPopover>
</Form.Label>
@@ -67,7 +67,7 @@ exports[`Criterion Container snapshot is ungraded and is grading 1`] = `
this label
</strong>
<br />
explaination
explanation
</div>
<div
className="help-popover-option"
@@ -77,7 +77,7 @@ exports[`Criterion Container snapshot is ungraded and is grading 1`] = `
this label 2
</strong>
<br />
explaination 2
explanation 2
</div>
</InfoPopover>
</Form.Label>
@@ -115,7 +115,7 @@ exports[`Criterion Container snapshot is ungraded and is not grading 1`] = `
this label
</strong>
<br />
explaination
explanation
</div>
<div
className="help-popover-option"
@@ -125,7 +125,7 @@ exports[`Criterion Container snapshot is ungraded and is not grading 1`] = `
this label 2
</strong>
<br />
explaination 2
explanation 2
</div>
</InfoPopover>
</Form.Label>

View File

@@ -34,14 +34,14 @@ describe('Criterion Container', () => {
feedback: 'feedback mock',
options: [
{
explanation: 'explaination',
explanation: 'explanation',
feedback: 'option feedback',
label: 'this label',
name: 'option name',
points: 2,
},
{
explanation: 'explaination 2',
explanation: 'explanation 2',
feedback: 'option feedback 2',
label: 'this label 2',
name: 'option name 2',
@@ -89,16 +89,16 @@ describe('Criterion Container', () => {
});
test('is ungraded and is grading (Radio criterion get render)', () => {
const rubricCritera = el.find('.rubric-criteria');
expect(rubricCritera.children(0).name()).toEqual('RadioCriterion');
const rubricCriteria = el.find('.rubric-criteria');
expect(rubricCriteria.children(0).name()).toEqual('RadioCriterion');
});
test('is ungraded and is not grading (Review criterion get render)', () => {
el.setProps({
isGrading: false,
});
const rubricCritera = el.find('.rubric-criteria');
expect(rubricCritera.children(0).name()).toEqual('ReviewCriterion');
const rubricCriteria = el.find('.rubric-criteria');
expect(rubricCriteria.children(0).name()).toEqual('ReviewCriterion');
});
test('is graded and is not grading (Radio criterion get render)', () => {
@@ -106,13 +106,13 @@ describe('Criterion Container', () => {
isGrading: false,
gradeStatus: gradeStatuses.graded,
});
const rubricCritera = el.find('.rubric-criteria');
expect(rubricCritera.children(0).name()).toEqual('RadioCriterion');
const rubricCriteria = el.find('.rubric-criteria');
expect(rubricCriteria.children(0).name()).toEqual('RadioCriterion');
});
});
describe('mapStateToProps', () => {
const testState = { abitaryState: 'some data' };
const testState = { arbitraryState: 'some data' };
const ownProps = { orderNum: props.orderNum };
let mapped;
beforeEach(() => {

View File

@@ -14,7 +14,7 @@ const messages = defineMessages({
optional: {
id: 'ora-grading.CriterionFeedback.optional',
defaultMessage: '(Optional)',
description: 'addtional label for optional feedback field',
description: 'additional label for optional feedback field',
},
optionPoints: {
id: 'ora-grading.RadioCriterion.optionPoints',

View File

@@ -63,8 +63,8 @@ export class SubmissionsTable extends React.Component {
translate = (...args) => this.props.intl.formatMessage(...args);
handleViewAllResponsesClick = (data) => () => {
const getsubmissionUUID = (row) => row.original.submissionUUID;
this.props.loadSelectionForReview(data.map(getsubmissionUUID));
const getSubmissionUUID = (row) => row.original.submissionUUID;
this.props.loadSelectionForReview(data.map(getSubmissionUUID));
};
render() {

View File

@@ -43,7 +43,7 @@ exports[`FileDownload component snapshot download is completed 1`] = `
/>,
"pending": <FormattedMessage
defaultMessage="Downloading"
description="Download files penging state label"
description="Download files pending state label"
id="ora-grading.ResponseDisplay.SubmissionFiles.downloading"
/>,
}
@@ -96,7 +96,7 @@ exports[`FileDownload component snapshot download is failed 1`] = `
/>,
"pending": <FormattedMessage
defaultMessage="Downloading"
description="Download files penging state label"
description="Download files pending state label"
id="ora-grading.ResponseDisplay.SubmissionFiles.downloading"
/>,
}
@@ -149,7 +149,7 @@ exports[`FileDownload component snapshot download is inactive 1`] = `
/>,
"pending": <FormattedMessage
defaultMessage="Downloading"
description="Download files penging state label"
description="Download files pending state label"
id="ora-grading.ResponseDisplay.SubmissionFiles.downloading"
/>,
}
@@ -202,7 +202,7 @@ exports[`FileDownload component snapshot download is pending 1`] = `
/>,
"pending": <FormattedMessage
defaultMessage="Downloading"
description="Download files penging state label"
description="Download files pending state label"
id="ora-grading.ResponseDisplay.SubmissionFiles.downloading"
/>,
}

View File

@@ -24,7 +24,7 @@ const messages = defineMessages({
downloading: {
id: 'ora-grading.ResponseDisplay.SubmissionFiles.downloading',
defaultMessage: 'Downloading',
description: 'Download files penging state label',
description: 'Download files pending state label',
},
downloaded: {
id: 'ora-grading.ResponseDisplay.SubmissionFiles.downloaded',

View File

@@ -19,7 +19,7 @@ jest.mock('data/redux/grading/selectors', () => ({
doesExist: (state) => ({ nextDoesExist: state }),
},
activeIndex: (state) => ({ activeIndex: state }),
selectionLength: (state) => ({ selectionlength: state }),
selectionLength: (state) => ({ selectionLength: state }),
}));
jest.mock('data/redux/requests/selectors', () => ({
allowNavigation: (state) => ({ allowNavigation: state }),

View File

@@ -53,7 +53,7 @@ describe('ReviewContent component', () => {
test('isFailed loads from requests.isFailed(fetchSubmission)', () => {
expect(mapped.isFailed).toEqual(selectors.requests.isFailed(testState, { requestKey }));
});
test('isLoadeed loads from requests.isCompleted(fetchSubmission)', () => {
test('isLoaded loads from requests.isCompleted(fetchSubmission)', () => {
expect(mapped.isLoaded).toEqual(selectors.requests.isCompleted(testState, { requestKey }));
});
});

View File

@@ -62,7 +62,7 @@ describe('DownloadErrors component', () => {
});
describe('behavior', () => {
describe('clearState', () => {
it('calls props.clearState with requestKey: downladFiles', () => {
it('calls props.clearState with requestKey: downloadFiles', () => {
el.instance().cancelAction();
expect(props.clearState).toHaveBeenCalledWith({ requestKey: RequestKeys.downloadFiles });
});

View File

@@ -106,7 +106,7 @@ describe('Review Modal Submit Error hooks', () => {
errorStatus = 'test-status';
const mockErrorProps = (args) => ({
confirm: { confirm: args },
headingMessag: { headingMessage: args },
headingMessage: { headingMessage: args },
contentMessage: { contentMessage: args },
});
const mockProps = mockErrorProps({ dispatch, errorStatus });

View File

@@ -32,7 +32,7 @@ jest.mock('data/redux/grading/selectors', () => ({
overallFeedback: jest.fn((...args) => ({
selectedOverallFeedback: args,
})),
isGrading: jest.fn((...args) => ({ isGragrding: args })),
isGrading: jest.fn((...args) => ({ isGrading: args })),
},
validation: {
overallFeedbackIsInvalid: jest.fn((...args) => ({
@@ -44,7 +44,7 @@ jest.mock('data/redux/grading/selectors', () => ({
describe('Rubric Feedback component', () => {
const props = {
intl: { formatMessage },
config: 'config stirng',
config: 'config string',
isGrading: true,
value: 'some value',
isInvalid: false,
@@ -135,7 +135,7 @@ describe('Rubric Feedback component', () => {
});
describe('mapStateToProps', () => {
const testState = { abitaryState: 'some data' };
const testState = { arbitraryState: 'some data' };
let mapped;
beforeEach(() => {
mapped = mapStateToProps(testState);

View File

@@ -10,7 +10,7 @@ exports[`Rubric Feedback component snapshot feedback value is invalid 1`] = `
>
<FormattedMessage
defaultMessage="Overall comments"
description="Rubric overall commnents label"
description="Rubric overall comments label"
id="ora-grading.Rubric.overallComments"
/>
</span>
@@ -53,7 +53,7 @@ exports[`Rubric Feedback component snapshot is graded 1`] = `
>
<FormattedMessage
defaultMessage="Overall comments"
description="Rubric overall commnents label"
description="Rubric overall comments label"
id="ora-grading.Rubric.overallComments"
/>
</span>
@@ -84,7 +84,7 @@ exports[`Rubric Feedback component snapshot is grading 1`] = `
>
<FormattedMessage
defaultMessage="Overall comments"
description="Rubric overall commnents label"
description="Rubric overall comments label"
id="ora-grading.Rubric.overallComments"
/>
</span>

View File

@@ -43,7 +43,7 @@ describe('Rubric hooks', () => {
afterEach(state.restore);
describe('redux values', () => {
beforeEach(() => { hook = hooks.reduxValues(); });
test('loads gradeIsPending from isPending requests selectror on submitGrade request', () => {
test('loads gradeIsPending from isPending requests selector on submitGrade request', () => {
expect(hook.gradeIsPending.useSelector(testState)).toEqual(
selectors.requests.isPending(testState, { requestKey: RequestKeys.submitGrade }),
);
@@ -51,7 +51,7 @@ describe('Rubric hooks', () => {
test('loads criteriaIndices from rubric selector', () => {
expect(hook.criteriaIndices).toEqual(useSelector(selectors.app.rubric.criteriaIndices));
});
test('loads isCompleted from requests selectror on submitGrade request', () => {
test('loads isCompleted from requests selector on submitGrade request', () => {
expect(hook.isCompleted.useSelector(testState)).toEqual(
selectors.requests.isCompleted(testState, { requestKey: RequestKeys.submitGrade }),
);
@@ -62,7 +62,7 @@ describe('Rubric hooks', () => {
test('loads isGrading from grading selector for selected submission', () => {
expect(hook.isGrading).toEqual(useSelector(selectors.grading.selected.isGrading));
});
test('loads lockIsPending from isPending requests selectror on setLock request', () => {
test('loads lockIsPending from isPending requests selector on setLock request', () => {
expect(hook.lockIsPending.useSelector(testState)).toEqual(
selectors.requests.isPending(testState, { requestKey: RequestKeys.setLock }),
);

View File

@@ -24,7 +24,7 @@ const messages = defineMessages({
overallComments: {
id: 'ora-grading.Rubric.overallComments',
defaultMessage: 'Overall comments',
description: 'Rubric overall commnents label',
description: 'Rubric overall comments label',
},
addComments: {
id: 'ora-grading.Rubric.addComments',

View File

@@ -1,4 +1,4 @@
import { getConfig } from '@edx/frontend-platform';
export const routePath = () => `${getConfig().PUBLIC_PATH}:courseId`;
export const locationId = () => window.location.pathname.replace(getConfig().PUBLIC_PATH, '');
export const locationId = () => decodeURIComponent(window.location.pathname).replace(getConfig().PUBLIC_PATH, '');

View File

@@ -15,10 +15,29 @@ describe('app constants', () => {
test('route path draws from public path and adds courseId', () => {
expect(constants.routePath()).toEqual(`${platform.PUBLIC_PATH}:courseId`);
});
test('locationId returns trimmed pathname', () => {
const old = window.location;
window.location = { pathName: `${platform.PUBLIC_PATH}somePath.jpg` };
expect(constants.locationId()).toEqual(window.location.pathname.replace(platform.PUBLIC_PATH, ''));
window.location = old;
describe('locationId', () => {
const domain = 'https://example.com';
test('returns trimmed pathname', () => {
const old = window.location;
Object.defineProperty(window, 'location', {
value: new URL(`${domain}${platform.PUBLIC_PATH}somePath.jpg`),
writable: true,
});
expect(constants.locationId()).toEqual(window.location.pathname.replace(platform.PUBLIC_PATH, ''));
window.location = old;
});
test('handle none-standard characters pathName', () => {
const old = window.location;
const noneStandardPath = `${platform.PUBLIC_PATH}ORG+%C4%90+2023`;
const expectedPath = `${platform.PUBLIC_PATH}ORG+Đ+2023`;
Object.defineProperty(window, 'location', {
value: new URL(`${domain}${noneStandardPath}`),
writable: true,
});
expect(noneStandardPath).not.toEqual(expectedPath);
expect(constants.locationId()).toEqual(expectedPath.replace(platform.PUBLIC_PATH, ''));
window.location = old;
});
});
});

View File

@@ -111,7 +111,7 @@ describe('app selectors unit tests', () => {
test('rubricConfig selector returns rubricConfig from oraMetadata', () => {
testOraSelector(selectors.rubric.config, oraMetadata.rubricConfig);
});
test('fileUploadResponseConfig returns fileUploadResponseconfig from oraMetadata', () => {
test('fileUploadResponseConfig returns fileUploadResponseConfig from oraMetadata', () => {
testOraSelector(
selectors.ora.fileUploadResponseConfig,
oraMetadata.fileUploadResponseConfig,
@@ -184,11 +184,11 @@ describe('app selectors unit tests', () => {
});
});
describe('shouldIncludeFeedback', () => {
it('returns true iff the passed feedback is optional or required', () => {
it('returns true if the passed feedback is optional or required', () => {
expect(selectors.shouldIncludeFeedback(feedbackRequirement.optional)).toEqual(true);
expect(selectors.shouldIncludeFeedback(feedbackRequirement.required)).toEqual(true);
expect(selectors.shouldIncludeFeedback(feedbackRequirement.disabled)).toEqual(false);
expect(selectors.shouldIncludeFeedback('aribitrary')).toEqual(false);
expect(selectors.shouldIncludeFeedback('arbitrary')).toEqual(false);
});
});
describe('fillGradeData selector', () => {

View File

@@ -62,7 +62,7 @@ const initialState = {
};
/**
* Updates the state's gradingData entry for the seleted submission,
* Updates the state's gradingData entry for the selected submission,
* overlaying the passed data on top of the existing data for the that
* submission.
* @return {object} - new state
@@ -82,7 +82,7 @@ export const updateGradingData = (state, data) => {
};
/**
* Updates the given state's gradingData entry for the seleted submission,
* Updates the given state's gradingData entry for the selected submission,
* overlaying the passed data on top of the existing data for the criterion
* at the given index (orderNum) for the rubric.
* @return {object} - new state

View File

@@ -218,7 +218,7 @@ describe('app reducer', () => {
describe('setCriterionFeedback', () => {
it('loads feedback by orderNum', () => {
expect(reducer(testState, actions.setCriterionFeedback(testState, args))).toEqual(
mocks.updateCriterion(testState, orderNum, { feecback: testValue }),
mocks.updateCriterion(testState, orderNum, { feedback: testValue }),
);
});
});

View File

@@ -21,7 +21,7 @@ export const next = {
module.hasNext,
),
/**
* Returns the submissionUUID for the next submission in the selection queu
* Returns the submissionUUID for the next submission in the selection queue
* @return {string} next submission id (null if there isn't one)
*/
submissionUUID: createSelector(

View File

@@ -183,7 +183,7 @@ describe('selected submission grading selectors unit tests', () => {
const { userDisplay } = selectors.selected;
const username = 'USERname';
const teamName = 'teamNAME';
it('is a reselect selector based on the username, teamname, and whether the ORA is individual', () => {
it('is a reselect selector based on the username, teamName, and whether the ORA is individual', () => {
expect(userDisplay.preSelectors).toEqual([
appSelectors.ora.isIndividual,
selectors.selected.username,

View File

@@ -131,8 +131,8 @@ describe('validation grading selectors unit tests', () => {
let show;
let criterionFeedback;
const selector = selectors.validation.criterionFeedbackIsInvalid;
const mockMethods = (showvalue, feedback) => {
selectors.validation.show = () => showvalue;
const mockMethods = (showValue, feedback) => {
selectors.validation.show = () => showValue;
selectors.validation.criterionFeedback = () => feedback;
};
beforeAll(() => {
@@ -168,8 +168,8 @@ describe('validation grading selectors unit tests', () => {
describe('validation.criterionSelectedOptionIsInvalid selector', () => {
const testState = { some: 'state' };
let show;
const mockMethods = (showvalue, selectedValue) => {
selectors.validation.show = () => showvalue;
const mockMethods = (showValue, selectedValue) => {
selectors.validation.show = () => showValue;
selectors.validation.criterionSelectedOption.mockReturnValueOnce(selectedValue);
};
const selector = selectors.validation.criterionSelectedOptionIsInvalid;

View File

@@ -72,7 +72,7 @@ describe('requests selectors unit tests', () => {
expect(select(selectors.errorCode, { error: { response: { data: testValue } } }))
.toEqual(testValue);
});
test('data reurns the request data', () => {
test('data returns the request data', () => {
expect(select(selectors.data, { data: testValue })).toEqual(testValue);
});
});

View File

@@ -75,7 +75,7 @@ describe('submission selectors unit tests', () => {
);
});
});
test('returns gradingStatus as GradeStatus iff lockstatus is lock, else lockStatus', () => {
test('returns gradingStatus as GradeStatus iff lockStatus is lock, else lockStatus', () => {
expect(output[0].gradingStatus).toEqual(submissions[1].gradeStatus);
expect(output[1].gradingStatus).toEqual(submissions[2].lockStatus);
expect(output[2].gradingStatus).toEqual(submissions[0].lockStatus);

View File

@@ -1,5 +1,5 @@
import { StrictDict } from 'utils';
// eslint-disable-next-line import/no-cycle
import { selectors, actions } from 'data/redux';
import { locationId } from 'data/constants/app';

View File

@@ -2,6 +2,7 @@ import * as zip from '@zip.js/zip.js';
import FileSaver from 'file-saver';
import { RequestKeys } from 'data/constants/requests';
// eslint-disable-next-line import/no-cycle
import { selectors } from 'data/redux';
import { locationId } from 'data/constants/app';
import api from 'data/services/lms/api';

View File

@@ -182,7 +182,7 @@ describe('download thunkActions', () => {
expect(download.zipFiles).toHaveBeenCalledWith(files, blobs, username);
});
it('network request catch all of the errors', () => {
const blobsErrors = ['arbitary', 'error'];
const blobsErrors = ['arbitrary', 'error'];
download.downloadBlobs = () => Promise.reject(blobsErrors);
download.downloadFiles()(dispatch, getState);

View File

@@ -1,5 +1,5 @@
import { StrictDict } from 'utils';
// eslint-disable-next-line import/no-cycle
import { actions, selectors } from 'data/redux';
import { RequestKeys, ErrorStatuses } from 'data/constants/requests';
@@ -60,7 +60,7 @@ export const loadSubmission = () => (dispatch, getState) => {
/**
* Start grading the current submission.
* Attempts to lock the submisison, and on a success, sets the local grading state to
* Attempts to lock the submission, and on a success, sets the local grading state to
* True, and then loads initializes the grading process with GradeData associated with
* the current submission. If there is no grade data, generates an empty grade entry
* based on the rubric config.
@@ -85,7 +85,7 @@ export const startGrading = () => (dispatch, getState) => {
};
/**
* Cancels the grading process for the current submisison.
* Cancels the grading process for the current submission.
* Releases the lock and dispatches stopGrading on success.
*/
export const cancelGrading = () => (dispatch, getState) => {

View File

@@ -24,7 +24,7 @@ jest.mock('data/redux/grading/selectors', () => ({
gradeData: jest.fn((state) => ({ gradeData: state })),
gradingData: jest.fn((state) => ({ gradingData: state })),
isGrading: jest.fn((state) => ({ isGrading: state })),
submissionUUID: jest.fn((state) => ({ selectedsubmissionUUID: state })),
submissionUUID: jest.fn((state) => ({ selectedSubmissionUUID: state })),
lockStatus: jest.fn((state) => ({ lockStatus: state })),
},
validation: {
@@ -62,7 +62,7 @@ describe('grading thunkActions', () => {
expect(actionArgs).not.toEqual(undefined);
});
describe('fetchSubmissionArgs', () => {
test('submissionUUID: selectors.grading.selected.submisssionUUID', () => {
test('submissionUUID: selectors.grading.selected.submissionUUID', () => {
expect(actionArgs.submissionUUID).toEqual(
selectedUUID,
);

View File

@@ -1,5 +1,5 @@
import { StrictDict } from 'utils';
// eslint-disable-next-line import/no-cycle
import app from './app';
import download from './download';
import grading from './grading';

View File

@@ -1,6 +1,7 @@
import { StrictDict } from 'utils';
import { RequestKeys } from 'data/constants/requests';
// eslint-disable-next-line import/no-cycle
import { actions } from 'data/redux';
import api from 'data/services/lms/api';
@@ -50,7 +51,7 @@ export const initializeApp = ({ locationId, ...rest }) => (dispatch) => {
/**
* Tracked fetchSubmissionStatus api method.
* Tracked to the `fetchSubmissinStatus` request key.
* Tracked to the `fetchSubmissionStatus` request key.
* @param {string} submissionUUID - target submission id
* @param {[func]} onSuccess - onSuccess method ((response) => { ... })
* @param {[func]} onFailure - onFailure method ((error) => { ... })

View File

@@ -81,7 +81,7 @@ describe('requests thunkActions module', () => {
[actions.requests.completeRequest({ requestKey, response: testData })],
]);
});
it('on failure disaptches completeRequest', async () => {
it('on failure dispatches completeRequest', async () => {
await requests.networkRequest({ requestKey, promise: Promise.reject(testData) })(dispatch);
expect(dispatch.mock.calls).toEqual([
[actions.requests.startRequest(requestKey)],

View File

@@ -40,7 +40,7 @@ const initializeApp = () => get(
/**
* get('/api/submission', { oraLocation, submissionUUID })
* @return {
* submision: {
* submission: {
* gradeData,
* gradeStatus,
* response: { files: [{}], text: <html> },

View File

@@ -1,6 +1,6 @@
/**
* Simple selector factory.
* Takes a list of string keys, and returns a simple slector for each.
* Takes a list of string keys, and returns a simple selector for each.
*
* @function
* @param {Object|string[]} keys - If passed as object, Object.keys(keys) is used.

View File

@@ -1,36 +1,38 @@
import { messages as footerMessages } from '@edx/frontend-component-footer';
import { messages as headerMesssages } from '@edx/frontend-component-header';
import { messages as headerMessages } from '@edx/frontend-component-header';
import { messages as paragonMessages } from '@edx/paragon';
import arMessages from './messages/ar.json';
// no need to import en messages-- they are in the defaultMessage field
import deDEMessages from './messages/de_DE.json';
import es419Messages from './messages/es_419.json';
import faIRMessages from './messages/fa_IR.json';
import frMessages from './messages/fr.json';
import zhcnMessages from './messages/zh_CN.json';
import dedeMessages from './messages/de_DE.json';
import frcaMessages from './messages/fr_CA.json';
import frCAMessages from './messages/fr_CA.json';
import hiMessages from './messages/hi.json';
import ititMessages from './messages/it_IT.json';
import ptptMessages from './messages/pt_PT.json';
import itITMessages from './messages/it_IT.json';
import ptPTMessages from './messages/pt_PT.json';
import ruMessages from './messages/ru.json';
import ukMessages from './messages/uk.json';
import zhCNMessages from './messages/zh_CN.json';
// no need to import en messages-- they are in the defaultMessage field
const appMessages = {
ar: arMessages,
'de-de': deDEMessages,
'es-419': es419Messages,
'fa-ir': faIRMessages,
fr: frMessages,
'zh-cn': zhcnMessages,
'de-de': dedeMessages,
'fr-ca': frcaMessages,
'fr-ca': frCAMessages,
hi: hiMessages,
'it-it': ititMessages,
'pt-pt': ptptMessages,
'it-it': itITMessages,
'pt-pt': ptPTMessages,
ru: ruMessages,
uk: ukMessages,
'zh-cn': zhCNMessages,
};
export default [
headerMesssages,
headerMessages,
footerMessages,
paragonMessages,
appMessages,

View File

@@ -0,0 +1,105 @@
{
"ora-grading.demoAlert.warningMessage": "ارسال نمره در حالت نمایشی از ORA Staff Grader جدید غیرفعال است.",
"ora-grading.demoAlert.confirm": "تایید",
"ora-grading.demoAlert.title": "از ارسال نسخه نمایشی ممانعت به عمل آمد",
"ora-grading.FilePopoverContent.filePopoverNameTitle": "نام پرونده",
"ora-grading.FilePopoverCellContent.filePopoverDescriptionTitle": "توصیف پرونده",
"ora-grading.FilePopoverCellContent.fileSizeTitle": "اندازه پرونده ",
"ora-grading.InfoPopover.fileInfo": "اطلاعات پرونده",
"ora-grading.ResponseDisplay.FileRenderer.retryButton": "تلاش دوباره",
"ora-grading.ResponseDisplay.FileRenderer.fileNotFound": "پرونده یافت نشد",
"ora-grading.ResponseDisplay.FileRenderer.unknownError": "خطاهای ناشناخته",
"PageTitle": "درجه بندی کارکنان ORA | {siteName}",
"ora-grading.InfoPopover.alt-text": "نمایش اطلاعات بیشتر",
"ora-grading.CriterionFeedback.addCommentsLabel": "نظردهی",
"ora-grading.CriterionFeedback.commentsLabel": "نظرات",
"ora-grading.CriterionFeedback.optional": "(اختیاری)",
"ora-grading.RadioCriterion.optionPoints": "{points} نمره",
"ora-grading.RadioCriterion.rubricSelectedError": "راهنمای امتیازدهی ضروری است",
"ora-grading.CriterionFeedback.criterionFeedbackError": "ارائه بازخورد ضروری است",
"ora-grading.CTA.feedbackMessage": "از اینکه از تجربه جدید درجه‌بندی کارکنان ORA استفاده می‌کنید تشکر می کنیم.",
"ora-grading.CTA.linkMessage": "ارائه بازخورد",
"ora-grading.CTA.letUsKnowMessage": "و به ما بگویید که نظر شما چیست!",
"ora-grading.ReviewModal.demoHeading": "حالت نسخه‌نمایشی",
"ora-grading.ReviewModal.demoMessage": "شما در حال نمایش تجربه جدید رتبه‌بندی کارکنان ORA هستید. تا زمانی که این ویژگی را فعال نکنید، امکان ارسال نمرات را نخواهید داشت. این مورد به تجربه رتبه‌بندی پیش‌فرض در 9 مه (2022/05/09) خواهد شد. برای انتخاب زودهنگام یا انصراف، لطفاً با پشتیبانی تماس بگیرید.",
"ora-grading.ListView.ListViewBreadcrumbs.backToResponses": "بازگشت به همه پاسخ‌های باز",
"ora-grading.ListView.noResultsFoundTitle": "اینجا هنوز چیزی نیست",
"ora-grading.ListView.noResultsFoundBody": "هنگامی که افراد پاسخ‌ها را ارسال کنند، در اینجا ظاهر می‌شوند",
"ora-grading.ListView.viewAllResponses": "مشاهده همه پاسخ‌ها",
"ora-grading.ListView.viewSelectedResponses": "مشاهده همه پاسخ‌ها ({value})",
"ora-grading.ListView.tableHeaders.username": "نام‌کاربری",
"ora-grading.ListView.tableHeaders.teamName": "نام تیم",
"ora-grading.ListView.tableHeaders.learnerSubmissionDate": "تاریخ ارسال یادگیرنده",
"ora-grading.ListView.tableHeaders.teamSubmissionDate": "تاریخ ارسال تیم",
"ora-grading.ListView.tableHeaders.grade": "نمره",
"ora-grading.ListView.tableHeaders.gradingStatus": "وضعیت نمره‌دهی",
"ora-grading.ListView.loadErrorHeading": "خطایی در هنگام بارگیری موارد ارسالی رخ داد",
"ora-grading.ListView.loadErrorMessage1": "هنگام بارگیری موارد ارسالی برای این پاسخ، خطایی روی داد. صفحه را دوباره بارگیری کنید یا به {backToResponses} بروید.",
"ora-grading.ListView.backToResponsesLowercase": "بازگشت به همه پاسخ‌های باز",
"ora-grading.ListView.reloadSubmissions": "بارگیری مجدد موارد ارسالی",
"ora-grading.ListView.loadingResponses": "بارگیری پاسخ‌ها",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverNameTitle": "نام پرونده",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverDescriptionTitle": "توصیف پرونده",
"ora-grading.ResponseDisplay.SubmissionFiles.tableNameHeader": "نام",
"ora-grading.ResponseDisplay.SubmissionFiles.tableExtensionHeader": "پسوند پرونده",
"ora-grading.ResponseDisplay.SubmissionFiles.tablePopoverHeader": "فراداده پرونده",
"ora-grading.ResponseDisplay.SubmissionFiles.downloadFiles": "پرونده‌های بارگیری‌شده",
"ora-grading.ResponseDisplay.SubmissionFiles.downloading": "در حال بارگیری",
"ora-grading.ResponseDisplay.SubmissionFiles.downloaded": "بارگیری شد!",
"ora-grading.ResponseDisplay.SubmissionFiles.retryDownload": "تلاش دوباره برای بارگیری",
"ora-grading.ResponseDisplay.SubmissionFiles.submissionFile": "پرونده‌های ارسالی",
"ora-grading.ResponseDisplay.SubmissionFiles.fileSizeExceed": "از اندازه مجاز بارگیری فراتر رفت",
"ora-grading.ReviewActions.overrideConfirmTitle": "آیا از لغو این نمره اطمینان دارید؟",
"ora-grading.ReviewActions.overrideConfirmWarning": "این عمل،قابل بازگشت نیست. ممکن است یادگیرنده پیش از این، نمره خود را دریافت کرده باشد.",
"ora-grading.ReviewActions.overrideConfirmContinue": "ادامه لغو نمره",
"ora-grading.ReviewActions.StartGradingButton.startGrading": "آغاز نمره‎‌دهی",
"ora-grading.ReviewActions.StartGradingButton.overrideGrade": "لغو نمره",
"ora-grading.ReviewActions.StartGradingButton.stopGrading": "توقف نمره‌دهی به این پاسخ",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.title": "آیا از توقف لغو نمره اطمینان دارید؟",
"ora-grading.ReviewActions.StopGradingConfirmModal.title": "آیا از توقف نمره‌دهی این پاسخ اطمینان دارید؟",
"ora-grading.ReviewActions.StopGradingConfirmModal.warning": "پیشرفت شما از بین خواهد رفت.",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.confirmText": "توقف لغو نمره",
"ora-grading.ReviewActions.StopGradingConfirmModal.confirmText": "لغو نمره‌دهی",
"ora-grading.ReviewActions.goBack": "بازگشت",
"ora-grading.ReviewActions.loadPrevious": "بارگیری ارسالی قبل",
"ora-grading.ReviewActions.loadNext": "بارگیری ارسالی بعد",
"ora-grading.ReviewActions.navigationLabel": "{current} از {total}",
"ora-grading.ReviewActions.pointsDisplay": "امتیاز: {pointsEarned}/{pointsPossible}",
"ora-grading.ReviewActions.hideRubric": "پنهان‌سازی راهنمای امتیازدهی",
"ora-grading.ReviewActions.showRubric": "نمایش راهنمای امتیازدهی",
"ora-grading.ReviewModal.closeReviewConfirm.title": "از بستن این مودال اطمینان دارید؟",
"ora-grading.ReviewModal.closeReviewConfirmWarning": "این کار، قابل بازگشت نیست. با این کار، فعالیت‌های ذخیره‌نشده کنار گذاشته می شوند و این روند رتبه‌بندی متوقف می‌شود.",
"ora-grading.ReviewModal.goBack": "بازگشت",
"ora-grading.ReviewModal.CloseReviewConfirmModal.confirmText": "بستن مودال",
"ora-grading.ReviewModal.loadingResponse": "بارگیری پاسخ",
"ora-grading.ReviewModal.demoTitleMessage": "نسخه‌نمایشی بارم‌بندی",
"ora-grading.ReviewModal.loadErrorHeading": "خطایی در هنگام بارگیری موارد ارسالی رخ داد",
"ora-grading.ReviewModal.loadErrorMessage1": "هنگام بارگیری این ارسال خطایی روی داد. دوباره ارسال کنید.",
"ora-grading.ReviewModal.reloadSubmission": "بارگیری مجدد ارسال",
"ora-grading.ReviewModal.gradeNotSubmitted.heading": "نمره ارسال نشد",
"ora-grading.ReviewModal.gradeNotSubmitted.Content": "متأسفیم، در هنگام تلاش برای ارسال این نمره، مشکلی پیش آمد. لطفا دوباره تلاش کنید.",
"ora-grading.ReviewModal.resubmitGrade": "نمره را دوباره ارسال کنید",
"ora-grading.ReviewModal.dismiss": "نادیده بگیر",
"ora-grading.ReviewModal.errorSubmittingGrade.Heading": "خطایی در ارسال نمره رخ داد",
"ora-grading.ReviewModal.errorSubmittingGrade.Content": "به نظر می رسد اول شخص دیگری به اینجا رسیده است! نمره ارسالی شما رد شده‌است",
"ora-grading.ReviewModal.errorLockContestedHeading": "قفل متعلق به کاربر دیگری است",
"ora-grading.ReviewModal.errorLockContested": "قفل متعلق به کاربر دیگری است",
"ora-grading.ReviewModal.errorLockBadRequestHeading": "درخواست معتبر نیست. لطفا ورودی خود را بررسی کنید.",
"ora-grading.ReviewModal.errorLockBadRequest": "درخواست معتبر نیست. لطفا ورودی خود را بررسی کنید.",
"ora-grading.ReviewModal.errorDownloadFailed": "امکان بارگیری پرونده‌ها وجود ندارد",
"ora-grading.ReviewModal.errorDownloadFailedContent": "متأسفیم، هنگام دانلود این پرونده‌ها مشکلی پیش آمد. لطفا دوباره تلاش کنید.",
"ora-grading.ReviewModal.errorRetryDownload": "تلاش دوباره برای بارگیری",
"ora-grading.ReviewModal.errorDownloadFailedFiles": "پرونده‌های ناموفق:",
"ora-grading.Rubric.gradeSubmitted": "نمره ارائه شد",
"ora-grading.Rubric.rubric": "راهنمای امتیازدهی",
"ora-grading.Rubric.submitGrade": "ارائه نمره",
"ora-grading.Rubric.submittingGrade": "ارائه نمره",
"ora-grading.Rubric.overallComments": "نظرات کلی",
"ora-grading.Rubric.addComments": "افزودن نظر (اختیاری)",
"ora-grading.Rubric.comments": "نظرات (اختیاری)",
"ora-grading.RubricFeedback.error": "ارائه بازخورد کلی ضروری است",
"ora-grading.lms-api.gradingStatusDisplay.ungraded": "بدون نمره",
"ora-grading.lms-api.gradingStatusDisplay.locked": "اکنون به‌دست فرد دیگری نمره‌دهی می‌شود",
"ora-grading.lms-api.gradingStatusDisplay.graded": "نمره‌دهی تکمیل شد",
"ora-grading.lms-api.gradingStatusDisplay.inProgress": "شما در حال ارزیابی و نمره‌دهی این پاسخ هستید"
}

View File

@@ -67,10 +67,10 @@
"ora-grading.ReviewActions.pointsDisplay": "Résultat : {pointsEarned}/{pointsPossible}",
"ora-grading.ReviewActions.hideRubric": "Masquer la rubrique",
"ora-grading.ReviewActions.showRubric": "Afficher la rubrique",
"ora-grading.ReviewModal.closeReviewConfirm.title": "Voulez-vous vraiment fermer ce modal?",
"ora-grading.ReviewModal.closeReviewConfirm.title": "Voulez-vous vraiment fermer cette fenêtre modale?",
"ora-grading.ReviewModal.closeReviewConfirmWarning": "Ça ne peut pas être annulé. Cela supprimera le travail non enregistré et arrêtera ce processus de notation.",
"ora-grading.ReviewModal.goBack": "Retour",
"ora-grading.ReviewModal.CloseReviewConfirmModal.confirmText": "Fermer Modal",
"ora-grading.ReviewModal.CloseReviewConfirmModal.confirmText": "Fermer la fenêtre modale",
"ora-grading.ReviewModal.loadingResponse": "Chargement de la réponse",
"ora-grading.ReviewModal.demoTitleMessage": "Démonstration de correcteur",
"ora-grading.ReviewModal.loadErrorHeading": "Erreur lors du chargement des soumissions",
@@ -84,8 +84,8 @@
"ora-grading.ReviewModal.errorSubmittingGrade.Content": "Il semble que quelqu'un d'autre soit arrivé le premier! Votre soumission de note a été rejetée",
"ora-grading.ReviewModal.errorLockContestedHeading": "La serrure appartenant à un autre utilisateur",
"ora-grading.ReviewModal.errorLockContested": "La serrure appartenant à un autre utilisateur",
"ora-grading.ReviewModal.errorLockBadRequestHeading": "Requête invalide. Veuillez vérifier votre entrée.",
"ora-grading.ReviewModal.errorLockBadRequest": "Requête invalide. Veuillez vérifier votre entrée.",
"ora-grading.ReviewModal.errorLockBadRequestHeading": "Demande invalide. Veuillez vérifier votre entrée.",
"ora-grading.ReviewModal.errorLockBadRequest": "Demande invalide. Veuillez vérifier votre entrée.",
"ora-grading.ReviewModal.errorDownloadFailed": "Impossible de télécharger les fichiers",
"ora-grading.ReviewModal.errorDownloadFailedContent": "Nous sommes désolés, une erreur s'est produite lorsque nous avons essayé de télécharger ces fichiers. Veuillez réessayer.",
"ora-grading.ReviewModal.errorRetryDownload": "Réessayez le téléchargement",

View File

@@ -16,10 +16,10 @@ jest.mock('react-dom', () => ({
}));
jest.mock('@edx/frontend-component-footer', () => ({
messages: 'frotnend-footer-messages',
messages: 'frontend-footer-messages',
}));
jest.mock('@edx/frontend-component-header', () => ({
messages: 'frotnend-header-messages',
messages: 'frontend-header-messages',
}));
jest.mock('@edx/frontend-platform', () => ({

View File

@@ -3,7 +3,7 @@ import '@testing-library/jest-dom';
import '@testing-library/jest-dom/extend-expect';
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import Adapter from '@wojtekmaj/enzyme-adapter-react-17';
Enzyme.configure({ adapter: new Adapter() });