/**
  * Make the license key.
  *
  * @since 1.0
  *
  * @return string
  */
 public function make()
 {
     $type = $this->get_product()->get_feature('licensing', array('field' => 'key-type'));
     $options = $this->get_product()->get_feature('licensing', array('field' => "type.{$type}"));
     $generator = itelic_get_key_type_generator($type);
     if ($generator) {
         $key = $generator->generate($options, $this->get_product(), $this->get_customer(), $this->get_transaction());
         return substr(trim($key), 0, 128);
     } else {
         throw new \UnexpectedValueException("Invalid key type '{$type}''");
     }
 }
 /**
  * @depends test_get_key_type_generator
  */
 public function test_get_key_type_class_must_be_overridden_with_a_sub_class()
 {
     $unique = md5(uniqid());
     $g1 = $this->getMock('\\ITELIC\\Key\\Generator');
     $g2 = $this->getMock('\\ITELIC\\Key\\Generator');
     $this->assertTrue(itelic_register_key_type($unique, 'Name', $g1));
     add_filter('itelic_get_key_type_generator', function ($generator, $slug) use($unique, $g2) {
         if ($slug === $unique) {
             $generator = $g2;
         }
         return $generator;
     }, 10, 2);
     $this->assertSame($g1, itelic_get_key_type_generator($unique));
 }