@Test
  public void testMultiColumn() {
    Author bob = Author.find("byName", "Bob").first();
    Book firstBook = Book.find("byIsbn", "1").first();
    firstBook.author = bob;
    ValidationResult res = Validation.current().valid(firstBook);
    assertFalse(res.ok);
    assertNotNull(Validation.errors(".title"));
    Error error = Validation.errors(".title").get(0);
    assertEquals("validation.unique", error.message());

    Validation.clear();
    firstBook.title = "Bobs Book";
    res = Validation.current().valid(firstBook);
    assertTrue(res.ok);
  }
Exemple #2
0
  public static void publish(Long id) throws IOException {
    models.Upload upload = getUpload(id);
    File uploadsDir = Util.getUploadDir(id);
    User user = getUser();
    UploadInfo uploadInfo = getUploadInfo(upload, uploadsDir, user);

    if (!uploadInfo.isPublishable()) {
      Validation.addError(null, "Upload is not valid, cannot publish. Fix errors first.");
      prepareForErrorRedirect();
      view(id);
    }

    List<models.ModuleVersion> versions = new LinkedList<models.ModuleVersion>();
    for (Module module : uploadInfo.modules) {
      models.Module mod = models.Module.find("name = ?", module.name).first();
      if (mod == null) {
        mod = new models.Module();
        mod.name = module.name;
        mod.owner = user;
        mod.create();
      }

      models.ModuleVersion modVersion = new models.ModuleVersion();
      modVersion.module = mod;
      modVersion.version = module.version;
      modVersion.isCarPresent = module.car.exists;
      modVersion.isJarPresent = module.jar.exists;
      modVersion.isJsPresent = module.js.exists;
      modVersion.isSourcePresent = module.source.exists;
      modVersion.isScriptsPresent = module.scripts.exists;
      modVersion.isAPIPresent = module.docs.hasUnzipped;
      modVersion.isDocPresent = module.docs.exists;
      modVersion.isResourcesPresent = module.docs.exists;
      modVersion.isRunnable = module.isRunnable;
      modVersion.jvmBinMajor = module.jvmBinMajor;
      modVersion.jvmBinMinor = module.jvmBinMinor;
      modVersion.jsBinMajor = module.jsBinMajor;
      modVersion.jsBinMinor = module.jsBinMinor;
      modVersion.isNativeJvm = module.isNativeJvm();
      modVersion.isNativeJs = module.isNativeJs();
      modVersion.published = Util.currentTimeInUTC();
      modVersion.doc = module.doc;
      modVersion.license = module.license;
      if (module.authors != null) {
        for (String author : module.authors) {
          modVersion.authors.add(Author.findOrCreate(author));
        }
      }
      modVersion.create();

      for (Import imp : module.getAllDependencies())
        modVersion.addDependency(
            imp.name,
            imp.version,
            imp.optional,
            imp.export,
            imp.mavenDependency != null,
            imp.herdDependency != null,
            imp.isNativeJvm(),
            imp.isNativeJs());

      for (ModuleChecker.Member member : module.members)
        modVersion.addMember(member.packageName, member.name, member.type, member.shared);

      for (ModuleChecker.Script script : module.scriptDescriptions)
        modVersion.addScript(
            script.name, script.description, script.unix, script.plugin, script.module);

      versions.add(modVersion);
    }

    FileUtils.copyDirectory(uploadsDir, Util.getRepoDir(), NonEmptyDirectoryFilter);
    FileUtils.deleteDirectory(uploadsDir);
    upload.delete();

    MyCache.evictUploadsForOwner(user);
    MyCache.evictModulesForOwner(user);

    if (versions.size() == 1) {
      flash("message", "Your module has been published");
      models.ModuleVersion moduleVersion = versions.get(0);
      Repo.view(moduleVersion.module.name, moduleVersion.version);
    } else {
      flash("message", "Your modules have been published");
      render(versions);
    }
  }