Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
jio_mebibou
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Alexandra Rogova
jio_mebibou
Commits
cbdf41ad
Commit
cbdf41ad
authored
Apr 30, 2015
by
Romain Courteaud
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ERP5: add put method.
This only stores properties editable on the default document view.
parent
9dbf26eb
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
306 additions
and
0 deletions
+306
-0
src/jio.storage/erp5storage.js
src/jio.storage/erp5storage.js
+38
-0
test/jio.storage/erp5storage.tests.js
test/jio.storage/erp5storage.tests.js
+268
-0
No files found.
src/jio.storage/erp5storage.js
View file @
cbdf41ad
...
@@ -142,6 +142,44 @@
...
@@ -142,6 +142,44 @@
});
});
};
};
ERP5Storage
.
prototype
.
put
=
function
(
id
,
data
)
{
var
context
=
this
;
return
extractPropertyFromForm
(
context
,
id
)
.
push
(
function
(
result
)
{
var
key
,
json
=
result
.
form_data
,
form_data
=
{};
form_data
[
json
.
form_id
.
key
]
=
json
.
form_id
[
"
default
"
];
// XXX How to store datetime:!!!!!
for
(
key
in
data
)
{
if
(
data
.
hasOwnProperty
(
key
))
{
if
(
key
===
"
form_id
"
)
{
throw
new
jIO
.
util
.
jIOError
(
"
ERP5: forbidden property:
"
+
key
,
400
);
}
if
((
key
!==
"
portal_type
"
)
&&
(
key
!==
"
parent_relative_url
"
))
{
if
(
!
json
.
hasOwnProperty
(
key
))
{
throw
new
jIO
.
util
.
jIOError
(
"
ERP5: can not store property:
"
+
key
,
400
);
}
form_data
[
json
[
key
].
key
]
=
data
[
key
];
}
}
}
return
context
.
putAttachment
(
id
,
result
.
action_href
,
new
Blob
([
JSON
.
stringify
(
form_data
)],
{
type
:
"
application/json
"
})
);
});
};
ERP5Storage
.
prototype
.
allAttachments
=
function
(
id
)
{
ERP5Storage
.
prototype
.
allAttachments
=
function
(
id
)
{
var
context
=
this
;
var
context
=
this
;
return
getDocumentAndHateoas
(
this
,
id
)
return
getDocumentAndHateoas
(
this
,
id
)
...
...
test/jio.storage/erp5storage.tests.js
View file @
cbdf41ad
...
@@ -991,4 +991,272 @@
...
@@ -991,4 +991,272 @@
});
});
});
});
/////////////////////////////////////////////////////////////////
// erp5Storage.put
/////////////////////////////////////////////////////////////////
module
(
"
erp5Storage.put
"
,
{
setup
:
function
()
{
this
.
server
=
sinon
.
fakeServer
.
create
();
this
.
server
.
autoRespond
=
true
;
this
.
server
.
autoRespondAfter
=
5
;
this
.
spy
=
sinon
.
spy
(
FormData
.
prototype
,
"
append
"
);
this
.
jio
=
jIO
.
createJIO
({
type
:
"
erp5
"
,
url
:
domain
,
default_view_reference
:
"
bar_view
"
});
},
teardown
:
function
()
{
this
.
server
.
restore
();
delete
this
.
server
;
this
.
spy
.
restore
();
delete
this
.
spy
;
}
});
test
(
"
put inexistent document
"
,
function
()
{
var
id
=
"
person_module/20150119_azerty
"
,
traverse_url
=
domain
+
"
?mode=traverse&relative_url=
"
+
encodeURIComponent
(
id
);
this
.
server
.
respondWith
(
"
GET
"
,
domain
,
[
200
,
{
"
Content-Type
"
:
"
application/hal+json
"
},
root_hateoas
]);
this
.
server
.
respondWith
(
"
GET
"
,
traverse_url
,
[
404
,
{
"
Content-Type
"
:
"
text/html
"
},
""
]);
stop
();
expect
(
3
);
this
.
jio
.
put
(
id
)
.
fail
(
function
(
error
)
{
ok
(
error
instanceof
jIO
.
util
.
jIOError
);
equal
(
error
.
message
,
"
Cannot find document:
"
+
id
);
equal
(
error
.
status_code
,
404
);
})
.
fail
(
function
(
error
)
{
ok
(
false
,
error
);
})
.
always
(
function
()
{
start
();
});
});
test
(
"
put ERP5 document
"
,
function
()
{
var
id
=
"
person_module/20150119_azerty
"
,
context
=
this
,
traverse_url
=
domain
+
"
?mode=traverse&relative_url=
"
+
encodeURIComponent
(
id
)
+
"
&view=bar_view
"
,
put_url
=
domain
+
"
azertytrea?f=g
"
,
document_hateoas
=
JSON
.
stringify
({
// Kept property
"
title
"
:
"
foo
"
,
// Remove all _ properties
"
_bar
"
:
"
john doo
"
,
"
_links
"
:
{
type
:
{
name
:
"
Person
"
}
},
"
_embedded
"
:
{
"
_view
"
:
{
form_id
:
{
key
:
"
form_id
"
,
"
default
"
:
"
Base_view
"
},
my_title
:
{
key
:
"
field_my_title
"
,
"
default
"
:
"
foo
"
,
editable
:
true
,
type
:
"
StringField
"
},
my_id
:
{
key
:
"
field_my_id
"
,
"
default
"
:
""
,
editable
:
true
,
type
:
"
StringField
"
},
my_title_non_editable
:
{
key
:
"
field_my_title_non_editable
"
,
"
default
"
:
"
foo
"
,
editable
:
false
,
type
:
"
StringField
"
},
my_start_date
:
{
key
:
"
field_my_start_date
"
,
"
default
"
:
"
foo
"
,
editable
:
true
,
type
:
"
DateTimeField
"
},
your_reference
:
{
key
:
"
field_your_title
"
,
"
default
"
:
"
bar
"
,
editable
:
true
,
type
:
"
StringField
"
},
sort_index
:
{
key
:
"
field_sort_index
"
,
"
default
"
:
"
foobar
"
,
editable
:
true
,
type
:
"
StringField
"
},
"
_actions
"
:
{
put
:
{
href
:
put_url
}
}
}
}
}),
server
=
this
.
server
;
this
.
server
.
respondWith
(
"
GET
"
,
domain
,
[
200
,
{
"
Content-Type
"
:
"
application/hal+json
"
},
root_hateoas
]);
this
.
server
.
respondWith
(
"
GET
"
,
traverse_url
,
[
200
,
{
"
Content-Type
"
:
"
application/hal+json
"
},
document_hateoas
]);
this
.
server
.
respondWith
(
"
POST
"
,
put_url
,
[
204
,
{
"
Content-Type
"
:
"
text/html
"
},
""
]);
stop
();
expect
(
21
);
this
.
jio
.
put
(
id
,
{
title
:
"
barè
"
,
id
:
"
foo
"
})
.
then
(
function
(
result
)
{
equal
(
result
,
id
);
equal
(
server
.
requests
.
length
,
3
);
equal
(
server
.
requests
[
0
].
method
,
"
GET
"
);
equal
(
server
.
requests
[
0
].
url
,
domain
);
equal
(
server
.
requests
[
0
].
requestBody
,
undefined
);
equal
(
server
.
requests
[
0
].
withCredentials
,
true
);
equal
(
server
.
requests
[
1
].
method
,
"
GET
"
);
equal
(
server
.
requests
[
1
].
url
,
traverse_url
);
equal
(
server
.
requests
[
1
].
requestBody
,
undefined
);
equal
(
server
.
requests
[
1
].
withCredentials
,
true
);
equal
(
server
.
requests
[
2
].
method
,
"
POST
"
);
equal
(
server
.
requests
[
2
].
url
,
put_url
);
ok
(
server
.
requests
[
2
].
requestBody
instanceof
FormData
);
equal
(
server
.
requests
[
2
].
withCredentials
,
true
);
equal
(
context
.
spy
.
callCount
,
3
,
"
FormData.append count
"
);
equal
(
context
.
spy
.
firstCall
.
args
[
0
],
"
form_id
"
,
"
First append call
"
);
equal
(
context
.
spy
.
firstCall
.
args
[
1
],
"
Base_view
"
,
"
First append call
"
);
equal
(
context
.
spy
.
secondCall
.
args
[
0
],
"
field_my_title
"
,
"
Second append call
"
);
equal
(
context
.
spy
.
secondCall
.
args
[
1
],
"
barè
"
,
"
Second append call
"
);
equal
(
context
.
spy
.
thirdCall
.
args
[
0
],
"
field_my_id
"
,
"
Third append call
"
);
equal
(
context
.
spy
.
thirdCall
.
args
[
1
],
"
foo
"
,
"
Third append call
"
);
})
.
fail
(
function
(
error
)
{
ok
(
false
,
error
);
})
.
always
(
function
()
{
start
();
});
});
test
(
"
put ERP5 document with non accepted property
"
,
function
()
{
var
id
=
"
person_module/20150119_azerty
"
,
traverse_url
=
domain
+
"
?mode=traverse&relative_url=
"
+
encodeURIComponent
(
id
)
+
"
&view=bar_view
"
,
put_url
=
domain
+
"
azertytrea?f=g
"
,
document_hateoas
=
JSON
.
stringify
({
// Kept property
"
title
"
:
"
foo
"
,
// Remove all _ properties
"
_bar
"
:
"
john doo
"
,
"
_links
"
:
{
type
:
{
name
:
"
Person
"
}
},
"
_embedded
"
:
{
"
_view
"
:
{
form_id
:
{
key
:
"
form_id
"
,
"
default
"
:
"
Base_view
"
},
my_title
:
{
key
:
"
field_my_title
"
,
"
default
"
:
"
foo
"
,
editable
:
true
,
type
:
"
StringField
"
},
my_id
:
{
key
:
"
field_my_id
"
,
"
default
"
:
""
,
editable
:
true
,
type
:
"
StringField
"
},
my_title_non_editable
:
{
key
:
"
field_my_title_non_editable
"
,
"
default
"
:
"
foo
"
,
editable
:
false
,
type
:
"
StringField
"
},
my_start_date
:
{
key
:
"
field_my_start_date
"
,
"
default
"
:
"
foo
"
,
editable
:
true
,
type
:
"
DateTimeField
"
},
your_reference
:
{
key
:
"
field_your_title
"
,
"
default
"
:
"
bar
"
,
editable
:
true
,
type
:
"
StringField
"
},
sort_index
:
{
key
:
"
field_sort_index
"
,
"
default
"
:
"
foobar
"
,
editable
:
true
,
type
:
"
StringField
"
},
"
_actions
"
:
{
put
:
{
href
:
put_url
}
}
}
}
});
this
.
server
.
respondWith
(
"
GET
"
,
domain
,
[
200
,
{
"
Content-Type
"
:
"
application/hal+json
"
},
root_hateoas
]);
this
.
server
.
respondWith
(
"
GET
"
,
traverse_url
,
[
200
,
{
"
Content-Type
"
:
"
application/hal+json
"
},
document_hateoas
]);
this
.
server
.
respondWith
(
"
POST
"
,
put_url
,
[
204
,
{
"
Content-Type
"
:
"
text/html
"
},
""
]);
stop
();
expect
(
3
);
this
.
jio
.
put
(
id
,
{
title
:
"
barè
"
,
title_non_editable
:
"
foo
"
})
.
then
(
function
(
result
)
{
ok
(
false
,
result
);
})
.
fail
(
function
(
error
)
{
ok
(
error
instanceof
jIO
.
util
.
jIOError
);
equal
(
error
.
message
,
"
ERP5: can not store property: title_non_editable
"
);
equal
(
error
.
status_code
,
400
);
})
.
fail
(
function
(
error
)
{
ok
(
false
,
error
);
})
.
always
(
function
()
{
start
();
});
});
}(
jIO
,
QUnit
,
Blob
,
sinon
,
encodeURIComponent
,
FormData
));
}(
jIO
,
QUnit
,
Blob
,
sinon
,
encodeURIComponent
,
FormData
));
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment