Add tests for plugin marketplace
This commit is contained in:
parent
5fa78b622f
commit
59c9a599fc
|
|
@ -566,6 +566,124 @@ describe('tests for "plugins" module', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('tests for "market" module', () => {
|
||||||
|
const modulePath = '../admin/market';
|
||||||
|
|
||||||
|
// TODO: test initializing market table
|
||||||
|
|
||||||
|
it('install a plugin', async () => {
|
||||||
|
const fetch = jest.fn()
|
||||||
|
.mockReturnValueOnce(Promise.resolve({ errno: 0, msg: 'success' }))
|
||||||
|
.mockReturnValueOnce(Promise.resolve({ errno: 1, msg: 'failed' }))
|
||||||
|
.mockReturnValueOnce(Promise.reject());
|
||||||
|
const url = jest.fn(path => path);
|
||||||
|
const swal = jest.fn();
|
||||||
|
const toastr = {
|
||||||
|
success: jest.fn(),
|
||||||
|
warning: jest.fn()
|
||||||
|
};
|
||||||
|
const trans = jest.fn(key => key);
|
||||||
|
const reloadTable = jest.fn();
|
||||||
|
const showAjaxError = jest.fn();
|
||||||
|
window.trans = trans;
|
||||||
|
window.fetch = fetch;
|
||||||
|
window.url = url;
|
||||||
|
window.swal = swal;
|
||||||
|
window.toastr = toastr;
|
||||||
|
window.showAjaxError = showAjaxError;
|
||||||
|
$.marketTable = {
|
||||||
|
ajax: {
|
||||||
|
reload: reloadTable
|
||||||
|
}
|
||||||
|
};
|
||||||
|
document.body.innerHTML = `
|
||||||
|
<tr id="plugin-foo-bar"><button class=".btn">Download</button></tr>
|
||||||
|
`;
|
||||||
|
|
||||||
|
const installPlugin = require(modulePath).installPlugin;
|
||||||
|
|
||||||
|
await installPlugin('foo-bar');
|
||||||
|
expect(fetch).toBeCalledWith({
|
||||||
|
type: 'POST',
|
||||||
|
url: 'admin/plugins/market/download',
|
||||||
|
dataType: 'json',
|
||||||
|
data: { name: 'foo-bar' },
|
||||||
|
beforeSend: expect.any(Function)
|
||||||
|
});
|
||||||
|
expect(swal).not.toBeCalledWith({ type: 'warning' });
|
||||||
|
expect(toastr.success).toBeCalledWith('success');
|
||||||
|
expect(reloadTable).toBeCalledWith(null, false);
|
||||||
|
|
||||||
|
await installPlugin('foo-bar');
|
||||||
|
expect(swal).toBeCalledWith({ type: 'warning', html: 'failed' });
|
||||||
|
|
||||||
|
await installPlugin('foo-bar');
|
||||||
|
expect(showAjaxError).toBeCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('update a plugin', async () => {
|
||||||
|
const fetch = jest.fn()
|
||||||
|
.mockReturnValueOnce(Promise.resolve({ errno: 0, msg: 'success' }));
|
||||||
|
const getPluginRowData = jest.fn()
|
||||||
|
.mockReturnValueOnce({ installed: false })
|
||||||
|
.mockReturnValue({
|
||||||
|
title: 'Foo Bar',
|
||||||
|
version: '5.1.4',
|
||||||
|
installed: '1.1.4'
|
||||||
|
});
|
||||||
|
const url = jest.fn(path => path);
|
||||||
|
const swal = jest.fn()
|
||||||
|
.mockReturnValueOnce(Promise.resolve())
|
||||||
|
.mockReturnValueOnce(Promise.reject())
|
||||||
|
.mockReturnValueOnce(Promise.resolve());
|
||||||
|
const toastr = {
|
||||||
|
success: jest.fn(),
|
||||||
|
warning: jest.fn()
|
||||||
|
};
|
||||||
|
const trans = jest.fn(key => key);
|
||||||
|
const reloadTable = jest.fn();
|
||||||
|
const showAjaxError = jest.fn();
|
||||||
|
window.trans = trans;
|
||||||
|
window.fetch = fetch;
|
||||||
|
window.url = url;
|
||||||
|
window.swal = swal;
|
||||||
|
window.toastr = toastr;
|
||||||
|
window.showAjaxError = showAjaxError;
|
||||||
|
$.marketTable = {
|
||||||
|
ajax: {
|
||||||
|
reload: reloadTable
|
||||||
|
},
|
||||||
|
row: () => ({
|
||||||
|
data: getPluginRowData
|
||||||
|
})
|
||||||
|
};
|
||||||
|
document.body.innerHTML = `
|
||||||
|
<tr id="plugin-foo-bar"><button class=".btn">Update</button></tr>
|
||||||
|
`;
|
||||||
|
|
||||||
|
const updatePlugin = require(modulePath).updatePlugin;
|
||||||
|
|
||||||
|
await updatePlugin('foo-bar');
|
||||||
|
expect(swal).toBeCalledWith({ type: 'warning', html: 'not installed' });
|
||||||
|
expect(fetch).not.toBeCalled();
|
||||||
|
|
||||||
|
await updatePlugin('foo-bar');
|
||||||
|
expect(swal).toBeCalledWith({ type: 'warning', text: 'admin.confirmUpdate', showCancelButton: true });
|
||||||
|
expect(fetch).not.toBeCalled();
|
||||||
|
|
||||||
|
await updatePlugin('foo-bar');
|
||||||
|
expect(fetch).toBeCalledWith({
|
||||||
|
type: 'POST',
|
||||||
|
url: 'admin/plugins/market/download',
|
||||||
|
dataType: 'json',
|
||||||
|
data: { name: 'foo-bar' },
|
||||||
|
beforeSend: expect.any(Function)
|
||||||
|
});
|
||||||
|
expect(toastr.success).toBeCalledWith('success');
|
||||||
|
expect(reloadTable).toBeCalledWith(null, false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('tests for "update" module', () => {
|
describe('tests for "update" module', () => {
|
||||||
const modulePath = '../admin/update';
|
const modulePath = '../admin/update';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -130,14 +130,18 @@ async function updatePlugin(name) {
|
||||||
const data = $.marketTable.row(`#plugin-${name}`).data();
|
const data = $.marketTable.row(`#plugin-${name}`).data();
|
||||||
|
|
||||||
if (data.installed === false) {
|
if (data.installed === false) {
|
||||||
swal({ type: 'warning', html: 'not installed' });
|
return swal({ type: 'warning', html: 'not installed' });
|
||||||
}
|
}
|
||||||
|
|
||||||
await swal({
|
try {
|
||||||
text: trans('admin.confirmUpdate', { plugin: data.title, old: data.installed, new: data.version }),
|
await swal({
|
||||||
type: 'warning',
|
text: trans('admin.confirmUpdate', { plugin: data.title, old: data.installed, new: data.version }),
|
||||||
showCancelButton: true
|
type: 'warning',
|
||||||
});
|
showCancelButton: true
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
installPlugin(name, {
|
installPlugin(name, {
|
||||||
beforeSend: () => {
|
beforeSend: () => {
|
||||||
|
|
|
||||||
59
tests/MarketControllerTest.php
Normal file
59
tests/MarketControllerTest.php
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class MarketControllerTest extends TestCase
|
||||||
|
{
|
||||||
|
protected function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
return $this->actAs('admin');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testShowMarket()
|
||||||
|
{
|
||||||
|
$this->visit('/admin/plugins/market')
|
||||||
|
->see(trans('general.plugin-market'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDownload()
|
||||||
|
{
|
||||||
|
// Try to download a non-existent plugin
|
||||||
|
$this->post('/admin/plugins/market/download', [
|
||||||
|
'name' => 'non-existent-plugin'
|
||||||
|
])->seeJson([
|
||||||
|
'errno' => 1,
|
||||||
|
'msg' => trans('admin.plugins.market.non-existent', ['plugin' => 'non-existent-plugin'])
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Download and extract plugin
|
||||||
|
$this->post('/admin/plugins/market/download', [
|
||||||
|
'name' => 'hello-dolly'
|
||||||
|
])->seeJson([
|
||||||
|
'errno' => 0,
|
||||||
|
'msg' => trans('admin.plugins.market.install-success')
|
||||||
|
]);
|
||||||
|
$this->assertTrue(is_dir(base_path('plugins/hello-dolly')));
|
||||||
|
$this->assertFileNotExists(base_path('plugins/hello-dolly_v1.0.0.zip'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetMarketData()
|
||||||
|
{
|
||||||
|
$this->post('/admin/plugins/market-data')
|
||||||
|
->seeJsonStructure([
|
||||||
|
'data' => [[
|
||||||
|
'name',
|
||||||
|
'title',
|
||||||
|
'version',
|
||||||
|
'installed',
|
||||||
|
'description',
|
||||||
|
'author',
|
||||||
|
'dist',
|
||||||
|
'enabled',
|
||||||
|
'dependencies'
|
||||||
|
]]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Get plugins info without an valid certificate
|
||||||
|
config(['secure.certificates' => '']);
|
||||||
|
$this->setExpectedException('Error')->post('/admin/plugins/market-data');
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user