Задать вопрос
  • Обновила видеокарту но не увидела результата, в чем проблема?

    @tukreb
    Где вы достали 1060? На рынке продаются только убитые версии, которые не лучше 640, просто тупо из-за деградации компонентов. Вам нужно искать минимум 3050 из магазина.
  • Как перенести Hyper-V на другой комп?

    @tukreb
    vitz84, Это уже другой вопрос, не относящийся к этому топику.
    Во первых мы незнаем, как вы там это делаете.
    Во вторых какие конфигурации двух систем.

    Я могу только предположить, что вы изменяете файл из двух мест на одном диске без подключения диска по SMB, тогда ОС просто не сможет фиксировать изменения, которые были произведены из другой системы. Только SMB протокол и его блочные аналоги, умеют фиксировать изменения из разных точек.
    Если же вы используете что-то типа iSCSI и совершили роковую ошибку - используете один том для двух машин, то вы просто уничтожаете там свои данные, потому что каждая система будет видит только то, что она изменила.

    В общем я выше дал вам уже ответ как нужно делать, с соответствии с моим опытом по миграции более 500 виртуальных машин в год. Либо отмечайте ответ решением, либо я удалю его через несколько часов.

    П.С Если же вы перекидываете файлы через FTP, то обязательно их сначала заархивируется в zip или 7z, так как архивы умеют восстанавливать повреждения, в отличие от обычных файлов.
  • Как перенести Hyper-V на другой комп?

    @tukreb
    vitz84, да, в версии 5.0 он имеет xml формат
  • Как перенести Hyper-V на другой комп?

    @tukreb
    vitz84, конфигурационный файл - это если простыми словами БИОС и железо компа. Если вы его повредите, то получите ситуацию когда не запуститься диск. Если диск не повреждён его ещё можно будет запустить на новом конфиг файле, но много что внутри диска слетит, типа программ, которые привязаны к железу, сетевые интерфейсы, активация виндовс, все ключи активационные и т.д. В общем всё, что связано с железом полетит к херам и вам всё придётся восстанавливать вручную. Сами же файлы конечно не пострадают.
    Если же сам диск повреждён, то экспортируйте заново с рабочей системы, только отключите ВМ на время экспорта.

    П.С И да, если вы уже импортировали с изменениями, то откатить уже их нельзя. Заново делайте экспорт из старой системы.
  • Как перенести Hyper-V на другой комп?

    @tukreb
    vitz84, Да, должно выдать окно, выбрать новый Айди для ВМ или использовать старый, Вы должны выбрать старый, не нужно генерировать новый.
  • Как лучше обзавестись self-hosted почтой?

    @tukreb
    Не только обмазаться, но ещё и правильно настроить по документации гугл доменные записи, чтобы почта вообще доходила. Ну с этим благом гугл помогает, когда разворачивает твою почту, он пишет почему и как исправить.
  • Как правильно проводить функциональное тестирование, если всё завязано через сторонний API/SOAP сервер?

    @tukreb Автор вопроса
    BoShurik, наверно не получили уведомления, тостер бывает не выдаёт их когда одновременно ответили :) Проблема похоже решилась с disableReboot(), но вечером потестирую глубже.
  • Как правильно проводить функциональное тестирование, если всё завязано через сторонний API/SOAP сервер?

    @tukreb Автор вопроса
    BoShurik, мда, проблему решил через
    $client = self::createClient();
            $client->disableReboot();

    Добавил disableReboot(), он начал использовать мок классы везде :).
  • Как правильно проводить функциональное тестирование, если всё завязано через сторонний API/SOAP сервер?

    @tukreb Автор вопроса
    BoShurik, кэш я первым делом сбрасывал, не помогает :)
    В запросе GET '/panel/solidcp/enterprise-dispatchers/create' там инжектиться Handler
    public function create(Request $request, Create\Handler $handler): Response

    Где я и проверял через dd :)
    final readonly class Handler
    {
        public function __construct(
            private EnterpriseDispatcherRepository $enterpriseDispatcherRepository,
            private Flusher                        $flusher,
            private EnterpriseDispatcherService    $enterpriseDispatcherService,
            private CustomHttpClient               $customHttpClient,
        ) {}
    
        public function handle(Command $command): void
        {
            dd($this->enterpriseDispatcherService->getEnterpriseDispatcherRealUserId($command->url, $command->login, $command->password));
        }

    Но здесь он использует не мок сервис, а настоящий, хотя в тесте я замокал его.
    В чём моя ошибка?

    При этом, если достать внутри теста через
    $client->getContainer()->get(EnterpriseDispatcherService::class)
    , то вернёт нужно значение, но как только уходит в контроллер, он использует настоящие классы, игнорируя те, что я замокал.
  • Как правильно проводить функциональное тестирование, если всё завязано через сторонний API/SOAP сервер?

    @tukreb Автор вопроса
    BoShurik, и так провёл эксперемент. Оно не работает :) Точнее, оно теперь не выбрасывает ошибку, но так же всё равно не использует мок класс, а продолжает использовать оригинальный.
    public function testCreate(): void
        {
            $client = self::createClient();
            $service = $this->createMock(EnterpriseDispatcherService::class);
            $service->expects($this->once())
                ->method('getEnterpriseDispatcherRealUserId')
                ->willReturn($userId = 12333);
            self::getContainer()->set(EnterpriseDispatcherService::class, $service);
    
            $this->loginAs('test_admin');
            $client->request('GET', '/enterprise-dispatchers/create');
    
            $crawler = $client->submitForm('Create', [
                'form[name]' => $name = 'Test Enterprise Dispatcher',
                'form[url]' => 'http://127.0.0.2:9003',
                'form[login]' => 'test_login',
                'form[password]' => 'test_password',
            ]);	
        }

    После $client->submitForm(), оно должен вернуть 12333, но оно упадёт с ошибкой, потому что будет использовать оригинальный класс.
  • Как правильно проводить функциональное тестирование, если всё завязано через сторонний API/SOAP сервер?

    @tukreb Автор вопроса
    Сергей Соловьев,
    ладно на счёт сервиса в конструкторе, видимо придётся создать фабрику. На гитхабе все тоже приклеились к этому злосчастному конструктору... Видимо для всех это как красная тряпка :)
  • Как правильно проводить функциональное тестирование, если всё завязано через сторонний API/SOAP сервер?

    @tukreb Автор вопроса
    BoShurik, Сейчас на 6.4

    На гитхабе по симфони, говорят, что с похожей проблемой сталкивались и единственная возможность её избежать, изменять контейнер буквально сразу после запуска ядра (static::createClient();)

    Видимо мне придётся всё же опробовать dama/doctrine-test-bundle для отката транзакций :) Если у вас не появиться других идей.
  • Как правильно проводить функциональное тестирование, если всё завязано через сторонний API/SOAP сервер?

    @tukreb Автор вопроса
    BoShurik, Я пробовал всякие варианты, и после и до (ChatGPT такого насоветовал, но я от безысходности даже забавные варианты попробовал).

    На счёт того, бандла, да я видел его, но пока не вижу существенных плюсов в отличие от моего варианта. Если я правильно понимаю setUp() запускается перед каждым тестом, то есть не важно вынесу ли я эти значения непосредственно в тест или оставлю в setUp().
  • Как правильно проводить функциональное тестирование, если всё завязано через сторонний API/SOAP сервер?

    @tukreb Автор вопроса
    Сергей Соловьев, ммм, вы прочитали, что я вам ответил?:)
    С юнит тестами у меня нет проблем, там просто замокаем класс и всё проходит без каких проблем и разрастания кода.
    Функциональное тестирование имитирует работу реального приложения, с настоящим контейнером зависимостей, ядром, базой данной и всеми сопутствующими деталями фреймворка. Я не могу никуда убрать проверку выше, она всё равно сработает. Проверка по сути и так является компонентом, и она только в одном месте.

    Вас унесло не в ту сторону. Прочитайте мой вопрос ещё раз.
    То, что вы предлагаете, ни насколько не решит проблему:
    В итоге код разрастается просто катастрофически, если мне нужно протестировать 20 сервисов, мне нужно создать 20 интерфейсов, 20 мок классов и указать 20 записей в services_test.yaml.
  • Как правильно проводить функциональное тестирование, если всё завязано через сторонний API/SOAP сервер?

    @tukreb Автор вопроса
    Сергей Соловьев,
    Почему же? Согласно этому ответу Как оптимизировать сложные проверки в Entity? я всё делаю правильно.

    Ладно, допустим мы вынесем эту проверку выше, в контроллер, но это не решит вопрос, который я задал.
    Давайте я немного введу вас в курс дела, как работает функциональное тестирование в Симфони.
    Там запускается имитация браузера, который имитирует переходы по страницам, нажатие кнопок и т.д. То есть, если я вынесу эту проверку выше, она всё равно стригериться, и мне всё равно нужно её замокать.
  • Как правильно проводить функциональное тестирование, если всё завязано через сторонний API/SOAP сервер?

    @tukreb Автор вопроса
    BoShurik,
    Тест, здесь нет явного мокания, так как оно уже происходит через файл services_test.yaml
    final class CreateTest extends DbWebTestCase
    {
        public function testCreate(): void
        {
            $this->loginAs('test_admin');
            $this->client->request('GET', '/panel/solidcp/enterprise-dispatchers/create');
            //тут динамическая подмена заголовка HTTP по сути это тоже касается вопроса, 
            //так как мокание происходит похожим образом через *.yaml
            $this->setCustomHttpClientRespond('http://127.0.0.2:9003', ['HTTP/1.1 200 OK']); 
    
            $this->client->submitForm('Create', [
                'form[name]' => $name = 'Test Enterprise Dispatcher',
                'form[url]' => 'http://127.0.0.2:9003',
                'form[login]' => 'test_login',
                'form[password]' => 'test_password',
            ]);
    
            $this->assertSame(302, $this->client->getResponse()->getStatusCode());
    
            $crawler = $this->client->followRedirect();
    
            $this->assertSame(200, $this->client->getResponse()->getStatusCode());
            $this->assertStringContainsString('Enterprise Dispatchers', $crawler->filter('title')->text());
            $this->assertStringContainsString($name, $crawler->filter('body')->text());
        }
    }

    Для полноты картины DbWebTestCase
    class DbWebTestCase extends WebTestCase
    {
        private EntityManagerInterface $em;
        protected KernelBrowser $client;
    
        protected function setUp(): void
        {
            parent::setUp();
            $this->client = static::createClient();
            $this->client->disableReboot();
            $this->em = static::$kernel->getContainer()->get('doctrine')->getManager();
            $this->em->getConnection()->beginTransaction();
            $this->em->getConnection()->setAutoCommit(false);
        }
    
        protected function tearDown(): void
        {
            $this->em->getConnection()->rollback();
            $this->em->close();
            parent::tearDown();
        }
    
        protected function loginAs(string $name): void
        {
            $userRepository = $this->client->getContainer()->get(UserRepository::class);
            $user = $userRepository->getByLogin($name);
            $this->client->loginUser(UserMapper::mapUserToUserIdentity($user));
        }
    }

    P.S замена через $this->client->getContainer()->set(); вызовет ошибку
    Symfony\Component\DependencyInjection\Exception\InvalidArgumentException: 
    The "App\Service\Service" service is already initialized, you cannot replace it.
  • Как в Doctrine Symsony2 написать запрос к таблицам БД, имеющих one-to-many отношение?

    @tukreb
    tectolog, пример вообще не информативен :)
    у вас есть готовый RAW SQL запрос? Потом просто адаптируйте его на DQL.
  • Как правильно проводить функциональное тестирование, если всё завязано через сторонний API/SOAP сервер?

    @tukreb Автор вопроса
    Не, с unit тестами ни каких проблем.
    Под функциональными я имею введу те, что тестируют контроллеры с их формами, переходами между запросами и т.д

    EnterpriseDispatcherService - это просто прослойка проверка, чтобы получить Id и чтобы туда шаловливые ручки не присвоили что не нужно.

    login и пароль нужен, для того, чтобы проводить другие SOAP запросы, то есть их нужно хранить.
    Конструктор принадлежит классу EnterpriseDispatcher, в котором могут быть данные разных диспетчеров, чтобы проводить SOAP запросы к разным ни как не связанны между собой серверами.

    Когда идешь таким путем, то да - получается много компонентов (в данном случае классов/файлов).

    То есть других вариантов тут нет?
    Ну я перепробовал все стандартные решения и все они приводили к ошибкам
    Symfony\Component\DependencyInjection\Exception\InvalidArgumentException: 
    The "App\Service\Service" service is already initialized, you cannot replace it.


    Либо надо делать container->reset() чтобы сбросить контейнер зависимостей и избежать ошибку выше, но со всеми подводными камнями.
  • Как в Doctrine Symsony2 написать запрос к таблицам БД, имеющих one-to-many отношение?

    @tukreb
    Что вам мешает, сделать ReadModel где через SQL Query Builder (DBAL) строите нужные запросы без всяких выкрутасов вокруг Entity?
    Или у вас все формы построены без DTO, а напрямую к Entity?
  • Оставить старую термопасту или вообще без неё?

    @tukreb
    Без термопасты возможно, если вы сможете отполировать поверхность крышки ЦПУ и кулера, что не возможно без оборудования на миллионы долларов.