diff --git a/postcss.config.js b/postcss.config.js
index f053ebf7..0ff35571 100644
--- a/postcss.config.js
+++ b/postcss.config.js
@@ -1 +1,5 @@
-module.exports = {};
+module.exports = {
+ plugins: [
+ require("autoprefixer")
+ ]
+}
\ No newline at end of file
diff --git a/src/core/components/parameter-row.jsx b/src/core/components/parameter-row.jsx
index 8db1f29a..7db5e4ee 100644
--- a/src/core/components/parameter-row.jsx
+++ b/src/core/components/parameter-row.jsx
@@ -94,7 +94,7 @@ export default class ParameterRow extends Component {
{ param.get("name") }
{ !required ? null : * }
-
{ param.get("type") } { itemType && `[${itemType}]` }
+ { param.get("type") } { itemType && `[${itemType}]` }
({ param.get("in") })
diff --git a/src/core/utils.js b/src/core/utils.js
index 63d6f55a..eb6e0a0e 100644
--- a/src/core/utils.js
+++ b/src/core/utils.js
@@ -462,6 +462,12 @@ export const validateInteger = ( val ) => {
}
}
+export const validateFile = ( val ) => {
+ if ( val && !(val instanceof win.File) ) {
+ return "Value must be a file"
+ }
+}
+
// validation of parameters before execute
export const validateParam = (param, isXml) => {
let errors = []
@@ -472,7 +478,9 @@ export const validateParam = (param, isXml) => {
let stringCheck = type === "string" && !value
let arrayCheck = type === "array" && Array.isArray(value) && !value.length
let listCheck = type === "array" && Im.List.isList(value) && !value.count()
- if ( required && (stringCheck || arrayCheck || listCheck) ) {
+ let fileCheck = type === "file" && !(value instanceof win.File)
+
+ if ( required && (stringCheck || arrayCheck || listCheck || fileCheck) ) {
errors.push("Required field is not provided")
return errors
}
@@ -505,7 +513,10 @@ export const validateParam = (param, isXml) => {
errors.push({ index: index, error: err})
}
})
-
+ } else if ( type === "file" ) {
+ let err = validateFile(value)
+ if (!err) return errors
+ errors.push(err)
}
return errors
diff --git a/src/style/_form.scss b/src/style/_form.scss
index f8ba8536..185b836e 100644
--- a/src/style/_form.scss
+++ b/src/style/_form.scss
@@ -42,7 +42,8 @@ label
input[type=text],
input[type=password],
input[type=search],
-input[type=email]
+input[type=email],
+input[type=file]
{
min-width: 100px;
margin: 5px 0;
diff --git a/src/style/_layout.scss b/src/style/_layout.scss
index 572bc5fd..955e4d54 100644
--- a/src/style/_layout.scss
+++ b/src/style/_layout.scss
@@ -113,7 +113,7 @@ body
}
}
-.parаmeter__type
+.parameter__type
{
font-size: 12px;
diff --git a/test/core/utils.js b/test/core/utils.js
index baf7dbf7..0ac63e9d 100644
--- a/test/core/utils.js
+++ b/test/core/utils.js
@@ -1,7 +1,8 @@
/* eslint-env mocha */
import expect from "expect"
import { fromJS } from "immutable"
-import { mapToList, validateNumber, validateInteger, validateParam } from "core/utils"
+import { mapToList, validateNumber, validateInteger, validateParam, validateFile } from "core/utils"
+import win from "core/window"
describe("utils", function(){
@@ -157,6 +158,19 @@ describe("utils", function(){
})
})
+ describe("validateFile", function() {
+ let errorMessage = "Value must be a file"
+
+ it("validates against objects which are instances of 'File'", function() {
+ let fileObj = new win.File([], "Test File")
+ expect(validateFile(fileObj)).toBeFalsy()
+ expect(validateFile(null)).toBeFalsy()
+ expect(validateFile(undefined)).toBeFalsy()
+ expect(validateFile(1)).toEqual(errorMessage)
+ expect(validateFile("string")).toEqual(errorMessage)
+ })
+ })
+
describe("validateParam", function() {
let param = null
let result = null
@@ -171,6 +185,16 @@ describe("utils", function(){
expect( result ).toEqual( ["Required field is not provided"] )
})
+ it("validates required files", function() {
+ param = fromJS({
+ required: true,
+ type: "file",
+ value: undefined
+ })
+ result = validateParam( param, false )
+ expect( result ).toEqual( ["Required field is not provided"] )
+ })
+
it("validates required arrays", function() {
param = fromJS({
required: true,