Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tests Complete #11

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions .github/workflows/laravel2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: Laravel

on:
push:
branches: [ master ]
pull_request:
branches: [ master ]

jobs:
laravel-tests:

runs-on: ubuntu-latest

steps:
- uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e
with:
php-version: '8.0'
- uses: actions/checkout@v2

- name: Set up MySQL
env:
DB_USERNAME: root
DB_PASSWORD: root
DB_DATABASE: laravel_skill_test
run: |
sudo /etc/init.d/mysql start
mysql -e 'CREATE DATABASE ${{ env.DB_DATABASE }};' -u${{ env.DB_USERNAME }} -p${{ env.DB_PASSWORD }}
- name: Copy .env
run: php -r "file_exists('.env') || copy('.env.example', '.env');"

- name: Install Dependencies
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist

- name: Generate key
run: php artisan key:generate

- name: Directory Permissions
run: chmod -R 777 storage bootstrap/cache

- name: Execute Feature test via PHPUnit
env:
DB_PASSWORD: root
run: vendor/bin/phpunit
22 changes: 15 additions & 7 deletions app/Http/Controllers/EloquentController.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@ public function task2()
{
// TODO Eloquent Задание 2: С помощью модели Item реализовать запрос в переменной products
// select * from products where active = true order by created_at desc limit 3
// вместо []
$products = [];
$products = Item::whereActive(true)->orderByDesc('created_at')->limit(3)->get();

return view('eloquent.task2', [
'products' => $products
'products' => $products,
]);
}

Expand All @@ -24,10 +23,10 @@ public function task3()
// TODO Eloquent Задание 3: Добавить в модель Item scope для фильтрации активных продуктов (scopeActive())
// Одна строка кода
// вместо []
$products = [];
$products = Item::active()->get();

return view('eloquent.task2', [
'products' => $products
'products' => $products,
]);
}

Expand All @@ -36,17 +35,21 @@ public function task4($id)
// TODO Eloquent Задание 4: Найти Item по id и передать во view либо отдать 404 страницу
// Одна строка кода
// вместо []
$product = [];
$product = Item::findOrFail($id);

return view('eloquent.task4', [
'product' => $product
'product' => $product,
]);
}

public function task5(Request $request)
{
// TODO Eloquent Задание 5: В запросе будет все необходимое для создания записи
// Выполнить простое добавление новой записи в Item на основе $request
Item::create([
'title' => $request->title,
'active' => isset($request->active) ? $request->active : false,
]);

return redirect('/');
}
Expand All @@ -56,6 +59,10 @@ public function task6($id, Request $request)
$product = Item::findOrFail($id);
// TODO Eloquent Задание 6: В запросе будет все необходимое для обновления записи
// Выполнить простое обновление записи на основе $request
$product->update([
'title' => $request->title,
'active' => isset($request->active) ? $request->active : false,
]);

return redirect('/');
}
Expand All @@ -64,6 +71,7 @@ public function task7(Request $request)
{
// TODO Eloquent Задание 7: В запросе будет параметр products который будет содержать массив с id
// [1,2,3,4 ...] выполнить массовое удаление записей модели Item с учетом id в $request
Item::destroy($request->products);

return redirect('/');
}
Expand Down
2 changes: 1 addition & 1 deletion app/Http/Controllers/IndexController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;

class IndexController extends Controller
{
Expand All @@ -14,6 +13,7 @@ public function index()
return view('welcome', [
'title' => 'Welcome',
// TODO Blade Задание 1: Передайте users во view (название ключа users)
'users' => $users,
]);
}

Expand Down
1 change: 1 addition & 0 deletions app/Http/Requests/ItemStoreRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public function rules()
// Строковое
// Минимам 5 символов
// Максимум 15 символов
'title' => 'required|string|min:5|max:15',
];
}
}
5 changes: 5 additions & 0 deletions app/Models/Category.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,9 @@ class Category extends Model
use HasFactory;

protected $fillable = ['title'];

public function atricles()
{
return $this->belongsToMany(Article::class);
}
}
6 changes: 6 additions & 0 deletions app/Models/Item.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,10 @@ class Item extends Model
protected $fillable = ['title', 'active'];

// TODO Eloquent Задание 1: указать что таблица - products
protected $table = 'products';

public function scopeActive($query)
{
$query->where('active', 1);
}
}
15 changes: 1 addition & 14 deletions app/Policies/ItemPolicy.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ class ItemPolicy
/**
* Determine whether the user can view any models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function viewAny(User $user)
Expand All @@ -24,8 +23,6 @@ public function viewAny(User $user)
/**
* Determine whether the user can view the model.
*
* @param \App\Models\User $user
* @param \App\Models\Item $item
* @return \Illuminate\Auth\Access\Response|bool
*/
public function view(User $user, Item $item)
Expand All @@ -36,21 +33,17 @@ public function view(User $user, Item $item)
/**
* Determine whether the user can create models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function create(User $user)
{
// TODO Auth Задание: Разрешить добавление продуктов только пользователю с id = 10

return true;
return $user->id === 10;
}

/**
* Determine whether the user can update the model.
*
* @param \App\Models\User $user
* @param \App\Models\Item $item
* @return \Illuminate\Auth\Access\Response|bool
*/
public function update(User $user, Item $item)
Expand All @@ -61,8 +54,6 @@ public function update(User $user, Item $item)
/**
* Determine whether the user can delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\Item $item
* @return \Illuminate\Auth\Access\Response|bool
*/
public function delete(User $user, Item $item)
Expand All @@ -73,8 +64,6 @@ public function delete(User $user, Item $item)
/**
* Determine whether the user can restore the model.
*
* @param \App\Models\User $user
* @param \App\Models\Item $item
* @return \Illuminate\Auth\Access\Response|bool
*/
public function restore(User $user, Item $item)
Expand All @@ -85,8 +74,6 @@ public function restore(User $user, Item $item)
/**
* Determine whether the user can permanently delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\Item $item
* @return \Illuminate\Auth\Access\Response|bool
*/
public function forceDelete(User $user, Item $item)
Expand Down
3 changes: 1 addition & 2 deletions app/Providers/AppServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ class AppServiceProvider extends ServiceProvider
*/
public function register()
{
//
}

/**
Expand All @@ -25,6 +24,6 @@ public function register()
*/
public function boot()
{

Blade::component('hello', HelloWorld::class);
}
}
28 changes: 28 additions & 0 deletions app/View/Components/HelloWorld.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace App\View\Components;

use Illuminate\View\Component;

class HelloWorld extends Component
{
/**
* Create a new component instance.
*
* @return void
*/
public function __construct()
{
//
}

/**
* Get the view / contents that represent the component.
*
* @return \Illuminate\Contracts\View\View|\Closure|string
*/
public function render()
{
return view('components.hello-world');
}
}
48 changes: 31 additions & 17 deletions database/migrations/tasks/2021_11_18_122318_create_posts_table.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,32 +13,43 @@ class CreatePostsTable extends Migration
*/
public function up()
{
//TODO Migrations Задание 1: Создать таблицу categories с 2 полями id и title (не забыть про timestamps)
//

Schema::create('posts', function (Blueprint $table) {
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('title')->nullable()->default(null);
$table->timestamps();
});

//TODO Migrations Задание 2: Для title указать что значение по умолчанию NULL

//TODO Migrations Задание 9: Переименовать таблицу posts в articles
Schema::create('articles', function (Blueprint $table) {
$table->id();
//TODO Migrations Задание 8: Переименовать поле title в name
$table->string('name')->nullable();
//TODO Migrations Задание 6: Добавить поле description типа text (DEFAULT NULL) ПОСЛЕ поля title
$table->text('description')->default(null)->nullable();
//TODO Migrations Задание 3: Для active указать что значение по умолчанию TRUE

//TODO Migrations Задание 4: Добавить функционал soft delete

//TODO Migrations Задание 5: Добавить поля с timestamps (created_at, updated_at) через 1 метод
$table->boolean('active')->default(true);
$table->timestamps();
$table->softDeletes();
});

Schema::table('posts', function (Blueprint $table) {
//TODO Migrations Задание 6: Добавить поле description типа text (DEFAULT NULL) ПОСЛЕ поля title

//TODO Migrations Задание 7: Сделать провеку на наличие поля active и в случаи успеха добавить поле main (boolean default false)

//TODO Migrations Задание 8: Переименовать поле title в name
});

//TODO Migrations Задание 9: Переименовать таблицу posts в articles
//TODO Migrations Задание 7: Сделать провеку на наличие поля active и в случаи успеха добавить поле main (boolean default false)
if (Schema::hasColumn('articles', 'active')) {
Schema::table('articles', function (Blueprint $table) {
$table->boolean('main')->default(false)->after('active');
});
}

//TODO Migrations Задание 10: Добавить таблицу для связи articles и categories (belongsToMany) c foreign ключами
Schema::create('article_category', function (Blueprint $table) {
$table->unsignedBigInteger('article_id');
$table->unsignedBigInteger('category_id');
$table->foreign('article_id')->references('id')->on('articles');
$table->foreign('category_id')->references('id')->on('categories');
$table->timestamps();
$table->softDeletes();
});
}

/**
Expand All @@ -49,5 +60,8 @@ public function up()
public function down()
{
// TODO Migrations Задание 11: Удалить таблицы categories, articles, article_category если такие существуют
Schema::dropIfExists('articles');
Schema::dropIfExists('categories');
Schema::dropIfExists('article_category');
}
}
3 changes: 3 additions & 0 deletions resources/views/auth.blade.php
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
<!-- TODO Blade Задание 4: Сделать проверку авторизован пользователь или нет -->
@auth
{{ auth()->id() }}
@endauth
<!-- Если да то вывести ID пользователя -->
<!-- ID пользователя вывести внутри конструкции с проверкой -->
3 changes: 3 additions & 0 deletions resources/views/components/hello-world.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<div>
{{ date('Y-m-d') }}
</div>
2 changes: 1 addition & 1 deletion resources/views/layouts/app.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
</head>
<body class="antialiased">
<!-- TODO Blade Задание 3: Подключите view с меню -->
<!-- shared/menu.blade.php -->
@include('shared.menu')

@yield('content')
</body>
Expand Down
2 changes: 1 addition & 1 deletion resources/views/shared/user.blade.php
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
<div>
<div @class(['bg-red-500' => $loop->odd]) >
{{ $user->name }}
</div>
25 changes: 16 additions & 9 deletions resources/views/table.blade.php
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
<!-- TODO Blade Задание 2: Изменить реализацию этой view, расширить ее с использованием layout -->
<!-- layouts/app.blade.php -->
@extends('layouts.app')
@section('content')

<!-- TODO Blade Задание 6: В эту view с контроллера передается collection c users в переменной data -->
<!-- Выполнить foreach loop в одну строку -->
<!-- Используйте view shared/user.blade.php для item (переменная user во item view) -->
<!-- Используйте view shared/empty.blade.php для состояния когда нет элементов в колекции -->
@each('shared.user', $data, 'user', 'shared.empty')

<!-- TODO Blade Задание 6: В эту view с контроллера передается collection c users в переменной data -->
<!-- Выполнить foreach loop в одну строку -->
<!-- Используйте view shared/user.blade.php для item (переменная user во item view) -->
<!-- Используйте view shared/empty.blade.php для состояния когда нет элементов в колекции -->


<!-- TODO Blade Задание 7: Здесь сделайте классический foreach loop -->
<!-- Выведите div с $user->name -->
<!-- Воспользуйтесь переменной $loop и у нечетных div выведите класс - bg-red-500 -->
<!-- TODO Blade Задание 7: Здесь сделайте классический foreach loop -->
<!-- Выведите div с $user->name -->
<!-- Воспользуйтесь переменной $loop и у нечетных div выведите класс - bg-red-500 -->
@forelse($data as $user)
@include('shared.user')
@empty
@include('shared.empty')
@endforelse

@endsection
Loading