@@ -1,64 +0,0 @@ | |||
sudo: false | |||
dist: trusty | |||
language: php | |||
php: | |||
- 5.6 | |||
- 7 | |||
- 7.1 | |||
env: | |||
global: | |||
- CORE_BRANCH=stable14 | |||
matrix: | |||
- DB=pgsql | |||
matrix: | |||
allow_failures: | |||
- env: DB=pgsql CORE_BRANCH=master | |||
include: | |||
- php: 5.6 | |||
env: DB=sqlite | |||
- php: 5.6 | |||
env: DB=mysql | |||
- php: 5.6 | |||
env: DB=pgsql CORE_BRANCH=master | |||
fast_finish: true | |||
before_install: | |||
# enable a display for running JavaScript tests | |||
- export DISPLAY=:99.0 | |||
- sh -e /etc/init.d/xvfb start | |||
- nvm install 8 | |||
- npm install -g npm@latest | |||
- make | |||
- make appstore | |||
# install core | |||
- cd ../ | |||
- git clone https://github.com/nextcloud/server.git --recursive --depth 1 -b $CORE_BRANCH nextcloud | |||
- mv "$TRAVIS_BUILD_DIR" nextcloud/apps/raw | |||
before_script: | |||
- if [[ "$DB" == 'pgsql' ]]; then createuser -U travis -s oc_autotest; fi | |||
- if [[ "$DB" == 'mysql' ]]; then mysql -u root -e 'create database oc_autotest;'; fi | |||
- if [[ "$DB" == 'mysql' ]]; then mysql -u root -e "CREATE USER 'oc_autotest'@'localhost' IDENTIFIED BY '';"; fi | |||
- if [[ "$DB" == 'mysql' ]]; then mysql -u root -e "grant all on oc_autotest.* to 'oc_autotest'@'localhost';"; fi | |||
- cd nextcloud | |||
- mkdir data | |||
- ./occ maintenance:install --database-name oc_autotest --database-user oc_autotest --admin-user admin --admin-pass admin --database $DB --database-pass='' | |||
- ./occ app:enable raw | |||
- php -S localhost:8080 & | |||
- cd apps/raw | |||
script: | |||
- make test | |||
after_failure: | |||
- cat ../../data/nextcloud.log | |||
addons: | |||
firefox: 'latest' | |||
mariadb: '10.1' | |||
services: | |||
- postgresql | |||
- mariadb |
@@ -1,157 +0,0 @@ | |||
# This file is licensed under the Affero General Public License version 3 or | |||
# later. See the COPYING file. | |||
# @author Bernhard Posselt <dev@bernhard-posselt.com> | |||
# @copyright Bernhard Posselt 2016 | |||
# Generic Makefile for building and packaging a Nextcloud app which uses npm and | |||
# Composer. | |||
# | |||
# Dependencies: | |||
# * make | |||
# * which | |||
# * curl: used if phpunit and composer are not installed to fetch them from the web | |||
# * tar: for building the archive | |||
# * npm: for building and testing everything JS | |||
# | |||
# If no composer.json is in the app root directory, the Composer step | |||
# will be skipped. The same goes for the package.json which can be located in | |||
# the app root or the js/ directory. | |||
# | |||
# The npm command by launches the npm build script: | |||
# | |||
# npm run build | |||
# | |||
# The npm test command launches the npm test script: | |||
# | |||
# npm run test | |||
# | |||
# The idea behind this is to be completely testing and build tool agnostic. All | |||
# build tools and additional package managers should be installed locally in | |||
# your project, since this won't pollute people's global namespace. | |||
# | |||
# The following npm scripts in your package.json install and update the bower | |||
# and npm dependencies and use gulp as build system (notice how everything is | |||
# run from the node_modules folder): | |||
# | |||
# "scripts": { | |||
# "test": "node node_modules/gulp-cli/bin/gulp.js karma", | |||
# "prebuild": "npm install && node_modules/bower/bin/bower install && node_modules/bower/bin/bower update", | |||
# "build": "node node_modules/gulp-cli/bin/gulp.js" | |||
# }, | |||
app_name=$(notdir $(CURDIR)) | |||
build_tools_directory=$(CURDIR)/build/tools | |||
source_build_directory=$(CURDIR)/build/artifacts/source | |||
source_package_name=$(source_build_directory)/$(app_name) | |||
appstore_build_directory=$(CURDIR)/build/artifacts/appstore | |||
appstore_package_name=$(appstore_build_directory)/$(app_name) | |||
npm=$(shell which npm 2> /dev/null) | |||
composer=$(shell which composer 2> /dev/null) | |||
all: build | |||
# Fetches the PHP and JS dependencies and compiles the JS. If no composer.json | |||
# is present, the composer step is skipped, if no package.json or js/package.json | |||
# is present, the npm step is skipped | |||
.PHONY: build | |||
build: | |||
ifneq (,$(wildcard $(CURDIR)/composer.json)) | |||
make composer | |||
endif | |||
ifneq (,$(wildcard $(CURDIR)/package.json)) | |||
make npm | |||
endif | |||
ifneq (,$(wildcard $(CURDIR)/js/package.json)) | |||
make npm | |||
endif | |||
# Installs and updates the composer dependencies. If composer is not installed | |||
# a copy is fetched from the web | |||
.PHONY: composer | |||
composer: | |||
ifeq (, $(composer)) | |||
@echo "No composer command available, downloading a copy from the web" | |||
mkdir -p $(build_tools_directory) | |||
curl -sS https://getcomposer.org/installer | php | |||
mv composer.phar $(build_tools_directory) | |||
php $(build_tools_directory)/composer.phar install --prefer-dist | |||
php $(build_tools_directory)/composer.phar update --prefer-dist | |||
else | |||
composer install --prefer-dist | |||
composer update --prefer-dist | |||
endif | |||
# Installs npm dependencies | |||
.PHONY: npm | |||
npm: | |||
ifeq (,$(wildcard $(CURDIR)/package.json)) | |||
cd js && $(npm) run build | |||
else | |||
npm run build | |||
endif | |||
# Removes the appstore build | |||
.PHONY: clean | |||
clean: | |||
rm -rf ./build | |||
# Same as clean but also removes dependencies installed by composer, bower and | |||
# npm | |||
.PHONY: distclean | |||
distclean: clean | |||
rm -rf vendor | |||
rm -rf node_modules | |||
rm -rf js/vendor | |||
rm -rf js/node_modules | |||
# Builds the source and appstore package | |||
.PHONY: dist | |||
dist: | |||
make source | |||
make appstore | |||
# Builds the source package | |||
.PHONY: source | |||
source: | |||
rm -rf $(source_build_directory) | |||
mkdir -p $(source_build_directory) | |||
tar cvzf $(source_package_name).tar.gz ../$(app_name) \ | |||
--exclude-vcs \ | |||
--exclude="../$(app_name)/build" \ | |||
--exclude="../$(app_name)/js/node_modules" \ | |||
--exclude="../$(app_name)/node_modules" \ | |||
--exclude="../$(app_name)/*.log" \ | |||
--exclude="../$(app_name)/js/*.log" \ | |||
# Builds the source package for the app store, ignores php and js tests | |||
.PHONY: appstore | |||
appstore: | |||
rm -rf $(appstore_build_directory) | |||
mkdir -p $(appstore_build_directory) | |||
tar cvzf $(appstore_package_name).tar.gz ../$(app_name) \ | |||
--exclude-vcs \ | |||
--exclude="../$(app_name)/build" \ | |||
--exclude="../$(app_name)/tests" \ | |||
--exclude="../$(app_name)/Makefile" \ | |||
--exclude="../$(app_name)/*.log" \ | |||
--exclude="../$(app_name)/phpunit*xml" \ | |||
--exclude="../$(app_name)/composer.*" \ | |||
--exclude="../$(app_name)/js/node_modules" \ | |||
--exclude="../$(app_name)/js/tests" \ | |||
--exclude="../$(app_name)/js/test" \ | |||
--exclude="../$(app_name)/js/*.log" \ | |||
--exclude="../$(app_name)/js/package.json" \ | |||
--exclude="../$(app_name)/js/bower.json" \ | |||
--exclude="../$(app_name)/js/karma.*" \ | |||
--exclude="../$(app_name)/js/protractor.*" \ | |||
--exclude="../$(app_name)/package.json" \ | |||
--exclude="../$(app_name)/bower.json" \ | |||
--exclude="../$(app_name)/karma.*" \ | |||
--exclude="../$(app_name)/protractor\.*" \ | |||
--exclude="../$(app_name)/.*" \ | |||
--exclude="../$(app_name)/js/.*" \ | |||
.PHONY: test | |||
test: composer | |||
$(CURDIR)/vendor/phpunit/phpunit/phpunit -c phpunit.xml | |||
$(CURDIR)/vendor/phpunit/phpunit/phpunit -c phpunit.integration.xml |
@@ -1,52 +0,0 @@ | |||
# Raw | |||
Place this app in **nextcloud/apps/** | |||
## Building the app | |||
The app can be built by using the provided Makefile by running: | |||
make | |||
This requires the following things to be present: | |||
* make | |||
* which | |||
* tar: for building the archive | |||
* curl: used if phpunit and composer are not installed to fetch them from the web | |||
* npm: for building and testing everything JS, only required if a package.json is placed inside the **js/** folder | |||
The make command will install or update Composer dependencies if a composer.json is present and also **npm run build** if a package.json is present in the **js/** folder. The npm **build** script should use local paths for build systems and package managers, so people that simply want to build the app won't need to install npm libraries globally, e.g.: | |||
**package.json**: | |||
```json | |||
"scripts": { | |||
"test": "node node_modules/gulp-cli/bin/gulp.js karma", | |||
"prebuild": "npm install && node_modules/bower/bin/bower install && node_modules/bower/bin/bower update", | |||
"build": "node node_modules/gulp-cli/bin/gulp.js" | |||
} | |||
``` | |||
## Publish to App Store | |||
First get an account for the [App Store](http://apps.nextcloud.com/) then run: | |||
make && make appstore | |||
The archive is located in build/artifacts/appstore and can then be uploaded to the App Store. | |||
## Running tests | |||
You can use the provided Makefile to run all tests by using: | |||
make test | |||
This will run the PHP unit and integration tests and if a package.json is present in the **js/** folder will execute **npm run test** | |||
Of course you can also install [PHPUnit](http://phpunit.de/getting-started.html) and use the configurations directly: | |||
phpunit -c phpunit.xml | |||
or: | |||
phpunit -c phpunit.integration.xml | |||
for integration tests |
@@ -1,15 +0,0 @@ | |||
{ | |||
"name": "Raw", | |||
"description": "a", | |||
"type": "project", | |||
"license": "AGPL", | |||
"authors": [ | |||
{ | |||
"name": "a" | |||
} | |||
], | |||
"require": {}, | |||
"require-dev": { | |||
"phpunit/phpunit": "^5.4" | |||
} | |||
} |
@@ -1,3 +0,0 @@ | |||
#hello { | |||
color: red; | |||
} |
@@ -1,56 +0,0 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
height="32" | |||
width="32" | |||
version="1" | |||
viewBox="0 0 32 32" | |||
id="svg4" | |||
sodipodi:docname="app.svg" | |||
inkscape:version="0.92.1 r"> | |||
<metadata | |||
id="metadata10"> | |||
<rdf:RDF> | |||
<cc:Work | |||
rdf:about=""> | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
<defs | |||
id="defs8" /> | |||
<sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="789" | |||
inkscape:window-height="480" | |||
id="namedview6" | |||
showgrid="false" | |||
inkscape:zoom="7.375" | |||
inkscape:cx="-8.3389831" | |||
inkscape:cy="16" | |||
inkscape:window-x="0" | |||
inkscape:window-y="27" | |||
inkscape:window-maximized="0" | |||
inkscape:current-layer="svg4" /> | |||
<path | |||
d="M13.733 0a.915.915 0 0 0-.933.934V3.6c-1.182.304-2.243.794-3.267 1.4L7.6 3.068a.93.93 0 0 0-1.334 0l-3.2 3.2a.93.93 0 0 0 0 1.334L5 9.535c-.607 1.024-1.097 2.085-1.4 3.267H.933a.915.915 0 0 0-.933.934v4.533c0 .53.403.934.933.934H3.6c.303 1.182.793 2.243 1.4 3.267l-1.934 1.935a.93.93 0 0 0 0 1.333l3.2 3.2a.93.93 0 0 0 1.333 0L9.532 27c1.024.61 2.085 1.097 3.266 1.4v2.667c0 .53.402.933.932.933h4.534c.53 0 .933-.403.933-.935V28.4c1.18-.305 2.24-.795 3.265-1.4L24.4 28.93a.93.93 0 0 0 1.332 0l3.2-3.2a.93.93 0 0 0 0-1.333L27 22.465c.607-1.024 1.096-2.085 1.4-3.266h2.665a.915.915 0 0 0 .935-.933v-4.534a.915.915 0 0 0-.934-.933H28.4c-.304-1.182-.792-2.243-1.4-3.267L28.932 7.6a.93.93 0 0 0 0-1.334l-3.2-3.2a.93.93 0 0 0-1.333 0L22.465 5c-1.024-.607-2.084-1.097-3.266-1.4V.933A.915.915 0 0 0 18.267 0zM16 8.87A7.134 7.134 0 0 1 23.13 16 7.134 7.134 0 0 1 16 23.133c-3.936 0-7.13-3.196-7.13-7.132S12.063 8.87 16 8.87z" | |||
display="block" | |||
fill="#fff" | |||
id="path2" | |||
style="fill:#ffffff" /> | |||
</svg> |
@@ -1,7 +0,0 @@ | |||
<phpunit bootstrap="tests/bootstrap.php" colors="true"> | |||
<testsuites> | |||
<testsuite name="integration"> | |||
<directory>./tests/Integration</directory> | |||
</testsuite> | |||
</testsuites> | |||
</phpunit> |
@@ -1,7 +0,0 @@ | |||
<phpunit bootstrap="tests/bootstrap.php" colors="true"> | |||
<testsuites> | |||
<testsuite name="unit"> | |||
<directory>./tests/Unit</directory> | |||
</testsuite> | |||
</testsuites> | |||
</phpunit> |
@@ -1 +0,0 @@ | |||
<h1>Hello world</h1> |
@@ -1,18 +0,0 @@ | |||
<?php | |||
script('raw', 'script'); | |||
style('raw', 'style'); | |||
?> | |||
<div id="app"> | |||
<div id="app-navigation"> | |||
<?php print_unescaped($this->inc('navigation/index')); ?> | |||
<?php print_unescaped($this->inc('settings/index')); ?> | |||
</div> | |||
<div id="app-content"> | |||
<div id="app-content-wrapper"> | |||
<?php print_unescaped($this->inc('content/index')); ?> | |||
</div> | |||
</div> | |||
</div> | |||
@@ -1,10 +0,0 @@ | |||
<ul> | |||
<li><a href="#">First level entry</a></li> | |||
<li> | |||
<a href="#">First level container</a> | |||
<ul> | |||
<li><a href="#">Second level entry</a></li> | |||
<li><a href="#">Second level entry</a></li> | |||
</ul> | |||
</li> | |||
</ul> |
@@ -1,10 +0,0 @@ | |||
<div id="app-settings"> | |||
<div id="app-settings-header"> | |||
<button class="settings-button" | |||
data-apps-slide-toggle="#app-settings-content" | |||
></button> | |||
</div> | |||
<div id="app-settings-content"> | |||
<!-- Your settings in here --> | |||
</div> | |||
</div> |
@@ -1,29 +0,0 @@ | |||
<?php | |||
namespace OCA\Raw\Tests\Integration\Controller; | |||
use OCP\AppFramework\App; | |||
use Test\TestCase; | |||
/** | |||
* This test shows how to make a small Integration Test. Query your class | |||
* directly from the container, only pass in mocks if needed and run your tests | |||
* against the database | |||
*/ | |||
class AppTest extends TestCase { | |||
private $container; | |||
public function setUp() { | |||
parent::setUp(); | |||
$app = new App('raw'); | |||
$this->container = $app->getContainer(); | |||
} | |||
public function testAppInstalled() { | |||
$appManager = $this->container->query('OCP\App\IAppManager'); | |||
$this->assertTrue($appManager->isInstalled('raw')); | |||
} | |||
} |
@@ -1,31 +0,0 @@ | |||
<?php | |||
namespace OCA\Raw\Tests\Unit\Controller; | |||
use PHPUnit_Framework_TestCase; | |||
use OCP\AppFramework\Http\TemplateResponse; | |||
use OCA\Raw\Controller\PageController; | |||
class PageControllerTest extends PHPUnit_Framework_TestCase { | |||
private $controller; | |||
private $userId = 'john'; | |||
public function setUp() { | |||
$request = $this->getMockBuilder('OCP\IRequest')->getMock(); | |||
$this->controller = new PageController( | |||
'raw', $request, $this->userId | |||
); | |||
} | |||
public function testIndex() { | |||
$result = $this->controller->index(); | |||
$this->assertEquals('index', $result->getTemplateName()); | |||
$this->assertTrue($result instanceof TemplateResponse); | |||
} | |||
} |
@@ -1,19 +0,0 @@ | |||
<?php | |||
if (!defined('PHPUNIT_RUN')) { | |||
define('PHPUNIT_RUN', 1); | |||
} | |||
require_once __DIR__.'/../../../lib/base.php'; | |||
// Fix for "Autoload path not allowed: .../tests/lib/testcase.php" | |||
\OC::$loader->addValidRoot(OC::$SERVERROOT . '/tests'); | |||
// Fix for "Autoload path not allowed: .../raw/tests/testcase.php" | |||
\OC_App::loadApp('raw'); | |||
if(!class_exists('PHPUnit_Framework_TestCase')) { | |||
require_once('PHPUnit/Autoload.php'); | |||
} | |||
OC_Hook::clear(); |