/**
  * Determine if the provided expression refers to this week
  *
  * @return bool
  */
 public function thisWeek()
 {
     $scheduleWeek = $this->scheduler->getScheduleWeek();
     $currentWeek = $this->now->format('W');
     //if a month is defined, week refers to the week of the month
     $scheduleMonth = $this->scheduler->getScheduleMonth();
     if (!is_null($scheduleMonth) && $scheduleMonth !== Scheduler::NONE) {
         return $this->isCurrent($scheduleWeek, $this->now->weekOfMonth);
     }
     //if it's an odd or even week
     if ($scheduleWeek == 'odd' && $currentWeek & 1) {
         return true;
     } elseif ($scheduleWeek == 'even' && !($currentWeek & 1)) {
         return true;
     }
     return $this->isCurrent($scheduleWeek, $this->now->weekOfYear);
 }
 public function testOptsWithSpecificEnvironmentSet()
 {
     $opts = ['testOpt', 'option' => 'value', 'env' => 'a_fancy_environment'];
     $expectedOpts = ['testOpt', 'option' => 'value', 'env' => 'a_fancy_environment'];
     $args = ['testArgument'];
     /** @var \Indatus\Dispatcher\Drivers\DateTime\Scheduler $scheduler */
     $scheduler = $this->scheduler->args($args)->opts($opts)->everyWeekday();
     $this->assertInstanceOf($this->schedulerClass, $scheduler);
     $this->assertEquals($args, $scheduler->getArguments());
     $this->assertEquals($expectedOpts, $scheduler->getOptions());
     $this->assertNotEquals($scheduler->getSchedule(), $this->defaultSchedule);
     /** @var \Indatus\Dispatcher\Drivers\DateTime\Scheduler $scheduler */
     $scheduler = $this->scheduler->opts($opts)->args($args);
     $this->assertInstanceOf($this->schedulerClass, $scheduler);
     $this->assertEquals($args, $scheduler->getArguments());
     $this->assertEquals($expectedOpts, $scheduler->getOptions());
     //be sure schedule reset, if not then we didn't get a fresh SchedulerClass
     $this->assertEquals($scheduler->getSchedule(), $this->defaultSchedule);
 }