///
import * as React from "react";
import { mount, configure } from "enzyme";
import * as Adapter from 'enzyme-adapter-react-16';
import { ListItemAttachments } from "../../../src/controls/listItemAttachments/ListItemAttachments";
import { assert} from "chai";
configure({ adapter: new Adapter() });
describe("",()=>{
test("should render item attachment", async ()=>{
let mockContext = {
pageContext:{
web:{
absoluteUrl: "https://test.sharepoint.com/sites/test-site"
}
}
};
let mockSPService = {
getListItemAttachments: (listId, itemId)=>Promise.resolve([{
FileName : "Test file.docx",
ServerRelativeUrl: "/sites/test-site/Shared Documents/TestFile.docx"
},{
FileName : "Test file.xlsx",
ServerRelativeUrl: "/sites/test-site/Shared Documents/TestFile.xlsx"
}])
}
let listItemAttachments = mount();
//@ts-ignore
listItemAttachments.instance()._spservice = mockSPService;
await listItemAttachments.instance().componentDidMount();
listItemAttachments.update();
let attachmentCards = listItemAttachments.getDOMNode().querySelectorAll('.ms-DocumentCard');
let testWordCard = attachmentCards[0];
let testExcelCard = attachmentCards[1];
assert.equal(testWordCard.querySelector("img").src,"https://static2.sharepointonline.com/files/fabric/assets/item-types/96/docx.png");
assert.equal(testWordCard.textContent,"Test file.docx");
assert.equal(testExcelCard.querySelector("img").src,"https://static2.sharepointonline.com/files/fabric/assets/item-types/96/xlsx.png");
assert.equal(testExcelCard.textContent,"Test file.xlsx");
});
test("should render placeholder if item has no attachments", async ()=>{
let mockContext = {
pageContext:{
web:{
absoluteUrl: "https://test.sharepoint.com/sites/test-site"
}
}
};
let mockSPService = {
getListItemAttachments: (listId, itemId)=>Promise.resolve([])
}
let listItemAttachments = mount();
//@ts-ignore
listItemAttachments.instance()._spservice = mockSPService;
await listItemAttachments.instance().componentDidMount();
listItemAttachments.update();
let placeholder = listItemAttachments.getDOMNode().querySelector('[aria-label="ListItemAttachmentslPlaceHolderButtonLabel"]');
assert.isOk(placeholder)
});
test("should render placeholder if no item provided", async ()=>{
let mockContext = {
pageContext:{
web:{
absoluteUrl: "https://test.sharepoint.com/sites/test-site"
}
}
};
let mockSPService = {
getListItemAttachments: (listId, itemId)=>Promise.resolve([{
FileName : "Test file.docx",
ServerRelativeUrl: "/sites/test-site/Shared Documents/TestFile.docx"
},{
FileName : "Test file.xlsx",
ServerRelativeUrl: "/sites/test-site/Shared Documents/TestFile.xlsx"
}
])
}
let listItemAttachments = mount();
//@ts-ignore
listItemAttachments.instance()._spservice = mockSPService;
await listItemAttachments.instance().componentDidMount();
listItemAttachments.update();
let placeholder = listItemAttachments.getDOMNode().querySelector('[aria-label="ListItemAttachmentslPlaceHolderButtonLabel"]');
assert.isOk(placeholder)
});
test("should add and load attachments", async ()=>{
let mockContext = {
pageContext:{
web:{
absoluteUrl: "https://test.sharepoint.com/sites/test-site"
}
}
};
let asserted = false;
let listItemAttachmentsRef = React.createRef();
let mockFile = new File([], "Test file.txt");
let mockSPService = {
getListItemAttachments: (listId, itemId)=>Promise.resolve([{
FileName : "Test file.xlsx",
ServerRelativeUrl: "/sites/test-site/Shared Documents/TestFile.xlsx"
},{
FileName : "Test file.txt",
ServerRelativeUrl: "/sites/test-site/Shared Documents/TestFile.txt"
}]),
addAttachment: (listId: string, itemId: number, fileName: string, file: File, webUrl?: string)=>{
assert.equal(listId,"test-list-id");
assert.equal(itemId, 1);
assert.equal(file, mockFile);
asserted = true;
}
}
let listItemAttachments = mount();
//@ts-ignore
listItemAttachments.instance()._spservice = mockSPService;
await listItemAttachments.instance().componentDidMount();
let placeholder = listItemAttachments.getDOMNode().querySelector('[aria-label="ListItemAttachmentslPlaceHolderButtonLabel"]');
listItemAttachments.instance().setState({
filesToUpload:[mockFile]
});
listItemAttachments.update();
assert.isOk(placeholder)
await listItemAttachmentsRef.current.uploadAttachments(1);
listItemAttachments.update();
let attachmentCards = listItemAttachments.getDOMNode().querySelectorAll('.ms-DocumentCard');
let testWordCard = attachmentCards[0];
let testTxtCard = attachmentCards[1];
assert.equal(testWordCard.querySelector("img").src,"https://static2.sharepointonline.com/files/fabric/assets/item-types/96/xlsx.png");
assert.equal(testWordCard.textContent,"Test file.xlsx");
assert.equal(testTxtCard.querySelector("img").src,"https://static2.sharepointonline.com/files/fabric/assets/item-types/96/txt.png");
assert.equal(testTxtCard.textContent,"Test file.txt");
assert.isTrue(asserted);
});
test("should delete without itemId provided", async ()=>{
let mockContext = {
pageContext:{
web:{
absoluteUrl: "https://test.sharepoint.com/sites/test-site"
}
}
};
let mockFile = new File([], "Test file.txt");
let mockFileToDelete = new File([], "Test file to delete.txt");
let listItemAttachments = mount();
await listItemAttachments.instance().componentDidMount();
//@ts-ignore
await listItemAttachments.instance()._onAttachmentUpload(mockFile);
//@ts-ignore
await listItemAttachments.instance()._onAttachmentUpload(mockFileToDelete);
listItemAttachments.update();
let attachmentCards = listItemAttachments.getDOMNode().querySelectorAll('.ms-DocumentCard');
let mockFileCard = attachmentCards[0];
let mockFileCardToDelete = attachmentCards[1];
assert.equal(mockFileCard.textContent,"Test file.txt");
assert.equal(mockFileCardToDelete.textContent,"Test file to delete.txt");
listItemAttachments.instance().setState({
file: {
FileName: mockFileToDelete.name
}
});
//@ts-ignore
await listItemAttachments.instance().onConfirmedDeleteAttachment();
listItemAttachments.update();
attachmentCards = listItemAttachments.getDOMNode().querySelectorAll('.ms-DocumentCard');
mockFileCard = attachmentCards[0];
assert.equal(mockFileCard.textContent,"Test file.txt");
assert.isNotOk(attachmentCards[1]);
});
test("should delete with itemId provided", async ()=>{
let mockContext = {
pageContext:{
web:{
absoluteUrl: "https://test.sharepoint.com/sites/test-site"
}
}
};
let asserted = false;
let mockSPService = {
getListItemAttachments: (listId, itemId)=>Promise.resolve([]),
deleteAttachment: (fileName: string, listId: string, itemId: number)=>{
assert.equal(fileName, "Test file.txt");
assert.equal(listId, "test-list-id");
assert.equal(itemId, 1);
asserted = true;
return Promise.resolve();
}
}
jest.spyOn(mockSPService, "getListItemAttachments").mockReturnValueOnce(Promise.resolve([{
FileName : "Test file.xlsx",
ServerRelativeUrl: "/sites/test-site/Shared Documents/TestFile.xlsx"
},{
FileName : "Test file.txt",
ServerRelativeUrl: "/sites/test-site/Shared Documents/TestFile.txt"
}]));
jest.spyOn(mockSPService, "getListItemAttachments").mockReturnValueOnce(Promise.resolve([{
FileName : "Test file.xlsx",
ServerRelativeUrl: "/sites/test-site/Shared Documents/TestFile.xlsx"
}]));
let listItemAttachments = mount();
//@ts-ignore
listItemAttachments.instance()._spservice = mockSPService;
await listItemAttachments.instance().componentDidMount();
listItemAttachments.update();
let attachmentCards = listItemAttachments.getDOMNode().querySelectorAll('.ms-DocumentCard');
let mockFileCard = attachmentCards[0];
let mockFileCardToDelete = attachmentCards[1];
assert.equal(mockFileCard.textContent,"Test file.xlsx");
assert.equal(mockFileCardToDelete.textContent,"Test file.txt");
listItemAttachments.instance().setState({
file: {
FileName: "Test file.txt"
}
});
//@ts-ignore
await listItemAttachments.instance().onConfirmedDeleteAttachment();
//@ts-ignore
await listItemAttachments.instance().loadAttachments();
listItemAttachments.update();
attachmentCards = listItemAttachments.getDOMNode().querySelectorAll('.ms-DocumentCard');
mockFileCard = attachmentCards[0];
assert.equal(mockFileCard.textContent,"Test file.xlsx");
assert.isNotOk(attachmentCards[1]);
})
});